假设有说明int a[]={1,2,3,4,5,6},*p=a;则表达式*(p+1)的值为2
inta[5]={1,2,3,4,5},i//定义int数组a->5个连续的int存储空间首地址,按顺序值为1,2,3,4,5;int*p=a;//定义int指针,并初始化值为a,指向数组首地址p+=2;//指针按int类型方式向下偏移2位,指向从a[0]->a[2],值从1->3for(i=0;i==0;i++)//for循环i初值为0(循环入口),...
int a[5]={1,2,3,4,5},i //定义int数组a -> 5个连续的int存储空间首地址,按顺序值为1,2,3,4,5 ;int *p=a;//定义int指针,并初始化值为a,指向数组首地址 p+=2;//指针按int类型方式向下偏移2位,指向从a[0]->a[2],值从1->3 for(i=0;i==0;i++) //for循环i初值为...
因为 *(p++) 用的是 后缀加加,按规定,在表达式内不自增,出了表达式后再自增。所以:printf("%d %d",*p,*(p++));就等于:printf("%d %d",*p,*(p));输出 1 1 再执行 p=p+1; (地址增 1*sizeof(int) ).--- 你可以打印地址,看p指向的地址变化 printf("%p\n",p);pri...
输出顺序按照从右往左运行,最后的是*P,因为*p=a,所以*P输出数组的第一个元素 最后的*p=1;--(*p)先自减=0,*p=0;p--先复制=0;p=0;(*P)++先复制=0;(++p)中++p自加1,变为坐标为1的元素,a[1]=*(++p)=2;p此时也指向a[1]的,*p=2;...
下来看看这个程序的作用:int a[5],*p=a;前半句int a[5]是声明一个整型数组a,它有五个元素,分别是a[0]、a[1] 、a[2]、A[3]、a4[4],系统为她们分配五个连续的储存空间。后半句*p=a,定义了一个指向整形变量的指针p,并且把a[0]的地址赋值给p,所以p的值是a[0]的地址,我们也...
P=a 把数组a的首地址赋值给指针p,a数组的首个元素 a [0]的地址就是数组a的首地址,所以p指向的是a [0],那么对P解引用也就得到了a[0]的值就是1
选B。p[3]等同与a[3]。数组的名字a,是表示数组首地址的地址常量。其值就是&a[0];p=a;那么p的值也是&a[0];p和a都表示地址,所以*就是取地址对应的值。(a+2)就是首地址值往后+2的地址,也就是&a[2],那么*(a+2)就是a[2]的值2。同理*(P+2)也是a[2]的值2。p[3]是不...
是2 由于*p=a,p指向了a的第一个元素a[0](*++p)++ 这个先执行++p p指向a[1]p就是a[2]转化为a[2]++,由于++先算表达式值在自加1,所以这个表达式的值为2
int a[5]={3,2,1,5},p=a; //把数组a的首地址赋给p ++p;//指针移动到第二个数字也就是a[1];p=*p+2;//第二个数字+2;printf("%d %d %d\n",*(++p),//输出第三个数 (p++),输出第三个数后+1 (++p)输出第五个数 );...