#include <stdio.h>
#define N 4
int main()
{
int x[N]={1,9,8,4};
int i,*p=x;
/*数组方式*/
for(i=0;i<N;i++)
printf("%d",x[i]);
printf("/n");
//指针方式1
for(i=0;i<N;i++)
printf("%d",p[i]) ;
printf("/n");
//指针方式2
for(;p<x+N;p++)
printf("%d",*p) ;
printf("/n");
//指针方式3
p=x;
for(i=0;i<N;i++)
printf("%d",*(p+i)) ;
printf("/n");
return 0;
}

1.2
#include <stdio.h>
#define N 4
int main()
{
char x[N]={'1','9','8','4'};
int i;
char *p;
//数组方式
for(i=0;i<N;i++)
printf("%c",x[i]);
printf("/n");
//指针方式1
p=x;
for(i=0;i<N;i++)
printf("%c",p[i]);
printf("/n");
//指针方式2
for(i=0;i<N;i++)
printf("%c",*(p+i));
printf("/n");
//指针方式3
p=x;
for(;p<x+N;p++)
printf("%c",*p);
printf("/n");
return 0;
}

1、p地址是2000,++p为2004(整型)
2、p的地址是2000.++p的地址是2001(字符型)
3、不同的原因是不同的指针变量类型对应所占字节数不同
2
#include<stdio.h>
int main()
{
int x[2][4] = { {1,9,8,4}, {2,0,2,2}} ;
int i,j;
int *p;
int (*q)[4];
//数组名访问
for(i=0;i<2;i++)
{
for(j=0;j<4;j++)
printf("%d",x[i][j]);
printf("/n");
}
//指针q访问(行指针)
for(q=&x[0];q<x+2;q++)
{
for(j=0;j<4;j++)
printf("%d",*(*q+j));
printf("/n");
}
//指针p访问(列指针)
for(p=&x[0][0],i=0;p<&x[0][0]+8;p++,i++)
{
printf("%d",*p);
if((i+1)%4==0)
printf("/n");
}
return 0;
}

1,2004
2.2016
2.1
#include<stdio.h>
int main()
{
int x[2][4] = { {1,9,8,4}, {2,0,2,2}} ;
int i,j;
int *p;
int (*q)[4];
//数组名访问
for(i=0;i<2;i++)
{
for(j=0;j<4;j++)
printf("%d",x[i][j]);
printf("/n");
}
//指针q访问(行指针)
for(q=&x[0];q<x+2;q++)
{
for(j=0;j<4;j++)
printf("%d",*(*q+j));
printf("/n");
}
//指针p访问(列指针)
for(p=&x[0][0],i=0;p<&x[0][0]+8;p++,i++)
{
printf("%d",*p);
if((i+1)%4==0)
printf("/n");
}
return 0;
}

1.2001
2.2005
3.1与2是因为数据类型不同,p q不同是因为一个是行指针,一个是列指针。
3
#include <stdio.h>
#include <string.h>
#define N 80
int main()
{
char s1[] = "C, I love u.";
char s2[] = "C, I hate u.";
char tmp[N];
printf("sizeof(s1) vs. strlen(s1): /n");
printf("sizeof(s1) = %d/n", sizeof(s1));
printf("strlen(s1) = %d/n", strlen(s1));
printf("/nbefore swap: /n");
printf("s1: %s/n", s1);
printf("s2: %s/n", s2);
printf("/nswapping.../n");
strcpy(tmp, s1);
strcpy(s1, s2);
strcpy(s2, tmp);
printf("/nafter swap: /n");
printf("s1: %s/n", s1);
printf("s2: %s/n", s2);
return 0;
}

1.数组s1的大小是13
sizeof(s1)算数据类型在储存空间中占用字节数
strlen(s1)统计字符串的长度
2.不可以
3.交换了
3.1
#include <string.h>
#define N 80
int main()
{
char *s1 = "C, I love u.";
char *s2 = "C, I hate u.";
char *tmp;
printf("sizeof(s1) vs. strlen(s1): /n");
printf("sizeof(s1) = %d/n", sizeof(s1));
printf("strlen(s1) = %d/n", strlen(s1));
printf("/nbefore swap: /n");
printf("s1: %s/n", s1);
printf("s2: %s/n", s2);
printf("/nswapping.../n");
tmp = s1;
s1 = s2;
s2 = tmp;
printf("/nafter swap: /n");
printf("s1: %s/n", s1);
printf("s2: %s/n", s2);
return 0;
}

1.s1存放字符串首字母地址
sizeof统计char型指针变量占的字节数,strlen计算的是实际长度
2,可以
3,交换的是指针所指的位置,没有
4
原创文章,作者:jamestackk,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/267317.html