不是。要看给指针*p的初始化是什么。(*p)[4]用来指向有4个元素的数组正常来讲int(*P)[4]=a就是 p=a,即p=&a[0]; 指向a 的第一行的开始,然后(*p)[4]用来指向有4个元素的数组(如果是 p=&a[1]; 指向a 的第2行的开始)语句里 (*p) 是 第一行的开始举个例子:int a[4][5]={1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4};int (*p)[5];int i,j;p = &a[0]; printf("*p= %d \n", *p ); // 打印地址for(i=0;i<20;i++) printf("%d ", *(*p+i) ); // 打印所有数组元素的值,说一下:举个例子*(*p+2) 里的 *p+2是 第一行里的第3个元素的地址,*(*p+2) 是该元素的值还有问题吗,谢谢采纳,Thanks♪(・ω・)ノ
不是P与a等价它的值就等于a,也就是数组a的首地址也就是p[0] == a[0]p[1] == a[1]p[2] == a[2]p[3] == a[3]区别:a是数组,而P是指针(a不能直接运算,而p可以,如 p=p+1)
2 个回答
初见
赞同来自 :
不是。要看给指针*p的初始化是什么。(*p)[4]用来指向有4个元素的数组
正常来讲int(*P)[4]=a就是 p=a,即p=&a[0]; 指向a 的第一行的开始,然后(*p)[4]用来指向有4个元素的数组(如果是 p=&a[1]; 指向a 的第2行的开始)
语句里 (*p) 是 第一行的开始
举个例子:
int a[4][5]={1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4};
int (*p)[5];
int i,j;
p = &a[0];
printf("*p= %d \n", *p ); // 打印地址for
(i=0;i<20;i++)
printf("%d ", *(*p+i) ); // 打印所有数组元素的值,
说一下:举个例子*(*p+2) 里的 *p+2是 第一行里的第3个元素的地址,*(*p+2) 是该元素的值
还有问题吗,谢谢采纳,Thanks♪(・ω・)ノ
aron
赞同来自 :
不是
P与a等价
它的值就等于a,也就是数组a的首地址
也就是
p[0] == a[0]
p[1] == a[1]
p[2] == a[2]
p[3] == a[3]
区别:a是数组,而P是指针
(a不能直接运算,而p可以,如 p=p+1)
提问者
威望
粉丝
感谢
积分
赞同
提问
文章
回复
私信 问Ta
关注问题人数 3 人
相关问题