www.5213.net > 若int i,(*p)[3],A[][3]={1,2,3,4,5,6,7,8,9,10,11,12}...

若int i,(*p)[3],A[][3]={1,2,3,4,5,6,7,8,9,10,11,12}...

p[0]=&a[0] ,p[0]指向a[0]m=1时,p[1]=&a[3] ,p[1]指向a[3]m=2时,p[2]=&a[6] ,p[2]指向a[6]m=3时,p[3]=&a[9],p[3]指向a[9]]m=4时,p[4]=&a[12],p[4]指向a[12]p[3][2]);相当于p[3]+2 因为p[3]指向a[9],故p[3][2]指向a[11]a[11]所对应的值是12 ,故输出12

若有定义:int a[]={1,2,3,4,5,6,7,8,9,10,11,12},*p[3],m;,阅读下面程序段,写出运行结果: for(m=0;m<3;m++) p[m]=&a[m*4]; printf(“%d\n“,p[2][2]); 程序运行结果:请问答案是多少,解释一下运行过程 谢谢!问题补充:谢谢各位的指教!

int (*p)[4];表明p是行指针,即p指向二维数组中的一行.p=a;这一句表示p指向a[0],也就是指向a数组第0行的第0个元素(a[0][0])的地址.p[2]表示p指向a数组的第二行,即指向a[2]行,也就指向a[2][0]的地址.p[2]+3表示行指针指向a数组的第二行(从第0行开始),(从0开始)第3个元素,也就是a[2][3],*(p[2]+3)表示第2行,第3个元素的值.p+4表示第四行(从0行开始),因为a数组没有第四行,所以是错的.p[4]表示第四行(从0行开始),原因同上.*p表示a数组第0行,第0列地址,**p表示a[0][0]的值,值不会再包含元素,所以(**p)[2]是错的.

(*prt)[3]=a,指向数组a,a[0][0],a[0][1],a[0][2].,a[3][2],指针确实很麻烦..*p=a[0] ;p指向a[0][0],a[0][1],a[0][2] 验证程序如下:#include void main() {int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12} , (*prt)[3]=a, *p=a[0] ; int i; printf("%d\n",*p);//printf("%d\n",*prt

答案是Dp[ i ]是数组a[ ]的第i+1个元素,&p[ i ] 即取数组a[ ] 的第i + 1个元素的地址,故&p[ i ]表示数组元素地址.A 错,a+1本身就是数组第二个元素的地址,再取地址编译报错B 错,a是数组名,存储在静态区,不能进行自增+

a项,因为指针变量p=a+2;指向数组的第三个元素,取内容即可.

个人觉得是选A,应为p是指向一维数组的 所以*(p+5)是指向a[1][2]的 而b形式是错的 d也有 可能我好像没见过 标准的形式是*(*(ptr+1)+2) 反正不是a就是d 呵呵实在抱歉 我回去看一下 明天给你一个答案

相关搜索:

网站地图

All rights reserved Powered by www.5213.net

copyright ©right 2010-2021。
www.5213.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com