中易网

c语言中(*p)[2]什么意思

答案:5  悬赏:20  
解决时间 2021-02-16 22:49
c语言中(*p)[2]什么意思
最佳答案
(*p)[2];
书上说的没有错,
意思是说,
首先p是一个指针。
其次,指针p是指向的什么,那就要看后面的[2]了,意思是说,指针p必须指向一个数组,这个数组而且必须至少得有2个元素。

因此指针变量p是一个指向包含有两个int元素的数组的指针。

初始化实例:

int a[3][2]; int b[2]; int c[3](*p)[2];
p=&a[0];//正确
p=&a[1];//正确
p=a[0]; //错误
p=a[1]; //错误
p=b;//错误
p=&b; //正确
p=c; //错误
p=&c;//错误

解释如下:
二维数组a,其a[0]表示的是数组元素a[0][1]的地址,也就是说a[0]与&a[0][1]是相等的,因此a[0]不是一个包含两个元素的数组的地址,所以错误

二维数组a, 其&a[0]表示的含有两个元素的数组的地址,这两个元素是a[0][0]和a[0][1],该表达式的具体原因比较复杂,若想了解清楚,就请在本人的文库里下载有关指针方面的专题看看吧。

p=b;错误,因为b表示的是数组元素b[0]的地址,也就是b与&b[0]相同,所以他不是一个包含有两个元素的数组的地址,所以错误
p=&b; 原理同二组数组,&b才是表示的是真正的数组b的地址,虽然数组名b表示的是一个地址,但他是表示的数组中的首元素的地址(你要注意理解这句话,因为所有书上都是这样说的),可以看出,数组名不是表示的是数组的地址,而是首元素的地址。

当然p=c; p=&c的错误就一目了然了。
全部回答
错了吧,这样看的话p应该是个行指针
(*p)是转成列指针,(*p)[2]应该是取第三列的值
a[3][2]的话没有第三列的
应该把完整一点的代码贴上来再看
int (*p)[2]是数组指针,如果写成int *p[2]则是大小为2的指向整型的指针数组。
为什么需要括号呢,因为下标运算符[]的优先级高于运算符*。
int a[3][2]; (*p)[2];
你遇到这种问题,首先你把每个单元先替换成某个变量,如int (*p)[2],假设定义一个宏#define Point *p;那么就是int Point[2](这是一个一位数组,有两个空间),那么这个指针就是指向每个空间的首地址,至于每个空间有分成多少小的单元,那就不知道了。
(*p)[2] 是一个数组指针,指向含2个元素的一维数组。
对于为什么是一个数组指针,而不是一个指针数组的解释如下:
( )优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是2。
指针数组的定义如下:
int *p[n]// 定义了一个指针数组,该数组中每个元素(共有n个元素)都是一个指针,至于每个指针所指向的地址就要看后面的程序定义了。
对于*p[n]为什么是指针数组解释如下:
[ ]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
图们江国家森林公园地址有知道的么?有点事想
9时25分-8时35分=几
问一款空战游戏的名字,小时候玩的
哪些美甲的样式比较好看
笔记本色域45%和72%的差别有多大
要是一个小偷偷了一个人的东西,当小偷发现有
室外篮球那个种类好?牛皮的?pu的?橡胶的?
急!下楼梯的时候如何能故意摔倒??
从山东聊城运十吨货到衡阳运费多少
不要说我苦也不要说我累是哪首歌的歌词
巴林右旗文峰学校地址在什么地方,我要处理点
求大师告知,生在犯月怎么破解!
梦见自己一步一步走到半山坡看梅花树
歌词有一句微笑看你写的信
手机版泰拉瑞亚,忍者缠足怎么使用?
推荐资讯
买手机返话费划算不
求几张傲娇动漫女生的图,
某dvm,最大显示数为1999,若最小挡量程为200
本人DNF小白一枚。瞎子和奶妈还没有ss武器,
脚踝血管瘤图片大全
成都嗨串吧怎么去啊,有知道地址的么
如何写网页评价
求 川职改[1992]44号文件全文内容 有正确的
面筋配什么菜好吃
继承家里卖猪肉好吗?
用蒙古文怎么写“我是中国人”
玩使命召唤8画面卡顿,是显卡问题还是内存问
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?