int a[10]就是声明一个长度为10的Int类型数组 int *p 就是声明一个指针,这个指针在栈里,其字节长为4,就是地址。只不过这个地址是指向int类型的 p = a就是让p指向刚才的那个数组的头(第一个元素)(*p)++这个要分两部分说,*p就是通过p这个指针指向的空间的数据,那么*p就是a[0],然后再...
B. p += 2使p指向a[2], *++p表示先p增加1(指向a[3]),然后取*p的值,所以是a[3]=4 C. p += 3使p指向a[3], *p++表示先取*p的值, 然后p增加1(指向a[4]), 所以取得的值是a[3]=4 D. p += 2使p指向a[2], ++*p对*p的值增加1, 所以取得的值是a[2]=a[2]+1=4 ...
题目有问题,p的值是多少?式子*p=a+4;若没有对p赋值,直接用*p是错误的,若题目是 int a[10]={1,2,3,4,5,6,7,8,9,10}, p=a+4;则 (++p)=6 分析:p=a+4,即相当于p=&a[4]++p 则p=&a[5],所以*(++p)=*(&a[5])=a[5]=6 ...
初始时p=a + 5,即p指向的是a[5]即11,注意++的优先级比*高 首先j=3 case 3: printf("%d",*(--p));先--p,p指向了a[4]即9,输出9;然后j=2 case 2: printf("%d",*p++); break;先输出p指向的数,即a[4],输出9;然后p++,p指向了a[5],break,j=2结束 最后j=1 cas...
增加1指的是p+1),所以实际上*p++符号整体对外表现的值是*p的值,运算完成后p再加1.所以*p++等同于:*p; p += 1;举例(伪代码):a[5]={1,2,3,4,5} ;p=a ;for(5)printf *p++;输出是 1 2 3 4 5,且最后p指向&a【4】+sizeof(元素类型);...
int (*p) [2] //定义指向一维数组的指针;p=a //将首行的地址赋给p. 此时,*p的值为二维数组a的首行的地址,**p即为首行第一个元素的值,即1;p++ //此时p指向二维数组a的第二行,*p的值为第二行的地址,**p为第二行第一个元素的值,即3.若有不明白的可以继续问哈!
(*p)[2]是个二维数组指针,它指向数组a,[2]是为了指明第二维的长度(指向的数组中有2个元素),在执行p=a后(即(*p)[2]=a;之后)实际上p指向了a[0],此时p就是一个一维数组,有两个整数(1,2),当执行p++;后,p指向了a[1]这个一维数组,这个数组中还是有两个整数。
p=a;赋值后,p存放数组起始地址,即p指向数组a的第1个单元a[0],*p等同于p[0]等同于a[0]等于1
C编译器认为*和++是同优先级操作符,且都是从右至左结合的,所以*p++中的++只作用在p上,和*(p++)意思一样;在(*p)++中,由于()的优先级比*和++都高,所以++作用在()内的表达式*p上。比如有:int x,y,a[]={1,2,3,4,5},*p=a,*q=a;x=*p++;//执行这一句后x=a[0]=1,p=...
用C写的 include<stdio.h> main(){ int a[5]={4,6,8,10,12};int *p,s=1;for(p=a;p<=a+4;p++)/*由于数组名表示数组的首地址*/ s=s*(*p);/*这里的*p是p贮存的数据*/ printf("%d\n",s);}