int a[2][3]; a的类型相当于 int (*)[3]而不是int ** int a[2][3]; int (*b)[3] = a; 这是可以的 --- int *p[3]; 数组类型变量参与运算的时候视为指针。运算时的p[0],这里[]是指针的运算符,数组类型不会直接参与运算。 p[0]就是 *(p + 0) 也就是*p 显然p可以看成int **类型的 。 只有运算的时候 int *[]才是int **,声明的时候int *p[3]和int **p是不一样的。int **p是一个指针的空间,里面存的数据是int **,int *q[3]是3个指针空间里面存的数据是int *。 p用的时候是直接使用它保存的数据,q在用的时候使用的是声明的变量的首地址,因为那个地址保存的数据是int *所以地址的类型也就是int **。 p: |(int **)| q: |(int *)|(int *)|(int *)| 数组在运算时候转意为指针,但是数组变量本身不等于指针。p你可以用int **赋值,但是q不可以,因为q转意得到的int **并不是保存在变量里的。
二维数组与指向指针的指针
最新推荐文章于 2024-08-08 20:20:27 发布