作业帮 > 综合 > 作业

C++二维数组的指针表示为什么要加括号

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/19 06:08:07
C++二维数组的指针表示为什么要加括号
int a[3][4];
int (*p) [4] ; //为什么(*p)要加括号啊?
p=a;
这里加括号怎么解释啊?
其实要看懂可以令 a=*p ;即 Int a[4]; a 是数组类型 ,而a=*p可以等价写成&a=p;也就是p是指向int数组类型的指针 如果不加括号,*默认会与前面的类型int结合,也就是int*p[4]
再问: 我感觉应该这么写int[4]*p而不是int (*p) [4],int a[3][4]可以分解为一个一维数组int a[3],数组元素是 含有4个int型元素的一维数组,也就是元素类型int[4]的指针p----int[4]*p,int (*p) [4]这样写我就不太理解了???????
再答: C++里面[]都是写在变量名后面的,比如int p[4],int[4]*p会出现编译错误, 这是有原因的,因为p当参数传入函数的时候会退化成指针,即int*p,实际上数组类型如int p[]与该类型的指针类型非常相似int*p(但是他们的确不同),而指向某数组的指针你可以参照函数指针来理解就是把 变量名替换成(*a)这样的情况,比如int a,指向指针是int(*a),由于没有[]或者是函数的(),所以括号可以去掉,变成int*a。int p[3][4]这种情况,你要先把p[3]退化成指针,就是int(*p)[4],然后由于后面 []去掉括号会引起意义改变所以就是那个样子了。 举个函数指针的例子int func(int);这样一个函数指向他的指针是int (*a)(int),由于后面有()所以括号不能去掉,去掉后变成int*a(int ),变成了返回值为int*类型的函数。