我对指针的概念很陌生,最近遇到了这一行代码:
int arr[]={1,2,3};
int (*p)[3] = &arr;
上面的代码行和下面的代码有什么区别:
int arr[]={1,2,3};
int *p = arr;
以及为什么会给出错误:
int arr[]={1,2,3};
int *p = &arr;
类型差异
该类型p
的
int (*p)[3] = &arr;
是int (*)[3]
,即指向3
int
s数组的指针。
的类型p
:
int *p = arr;
很简单int*
,即指向的指针int
。
作为结果,
在第一种情况下,
*p
计算结果为3 int
s的数组,即int [3]
。
在第二种情况下,
*p
计算结果仅为int
。
要获得的第一个元素arr
,您必须使用(*p)[0]
或p[0][0]
在第一种情况下。
要获取的第一个元素arr
,您必须使用*p
或p[0]
在第二种情况下。
要获取的最后一个元素arr
,您必须使用(*p)[2]
或p[0][2]
在第一种情况下。
要获取的最后一个元素arr
,您必须使用*(p+2)
或p[2]
在第二种情况下。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句