c语言中(*p)[2]什么意思
答案:5 悬赏:20
解决时间 2021-02-16 22:49
- 提问者网友:温旧梦泪无声
- 2021-02-16 14:07
c语言中(*p)[2]什么意思
最佳答案
- 二级知识专家网友:独行浪子会拥风
- 2021-02-16 14:44
(*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是指向的什么,那就要看后面的[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的错误就一目了然了。
全部回答
- 1楼网友:怙棘
- 2021-02-16 17:56
错了吧,这样看的话p应该是个行指针
(*p)是转成列指针,(*p)[2]应该是取第三列的值
a[3][2]的话没有第三列的
应该把完整一点的代码贴上来再看
(*p)是转成列指针,(*p)[2]应该是取第三列的值
a[3][2]的话没有第三列的
应该把完整一点的代码贴上来再看
- 2楼网友:零点过十分
- 2021-02-16 17:02
int (*p)[2]是数组指针,如果写成int *p[2]则是大小为2的指向整型的指针数组。
为什么需要括号呢,因为下标运算符[]的优先级高于运算符*。
为什么需要括号呢,因为下标运算符[]的优先级高于运算符*。
- 3楼网友:北方的南先生
- 2021-02-16 15:43
int a[3][2]; (*p)[2];
你遇到这种问题,首先你把每个单元先替换成某个变量,如int (*p)[2],假设定义一个宏#define Point *p;那么就是int Point[2](这是一个一位数组,有两个空间),那么这个指针就是指向每个空间的首地址,至于每个空间有分成多少小的单元,那就不知道了。
你遇到这种问题,首先你把每个单元先替换成某个变量,如int (*p)[2],假设定义一个宏#define Point *p;那么就是int Point[2](这是一个一位数组,有两个空间),那么这个指针就是指向每个空间的首地址,至于每个空间有分成多少小的单元,那就不知道了。
- 4楼网友:酒安江南
- 2021-02-16 15:13
(*p)[2] 是一个数组指针,指向含2个元素的一维数组。
对于为什么是一个数组指针,而不是一个指针数组的解释如下:
( )优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是2。
指针数组的定义如下:
int *p[n]// 定义了一个指针数组,该数组中每个元素(共有n个元素)都是一个指针,至于每个指针所指向的地址就要看后面的程序定义了。
对于*p[n]为什么是指针数组解释如下:
[ ]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。
对于为什么是一个数组指针,而不是一个指针数组的解释如下:
( )优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是2。
指针数组的定义如下:
int *p[n]// 定义了一个指针数组,该数组中每个元素(共有n个元素)都是一个指针,至于每个指针所指向的地址就要看后面的程序定义了。
对于*p[n]为什么是指针数组解释如下:
[ ]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯