求助 C语言二维数组名问题
int *p1[3], (*p2)[2], ** p, a[3][2];a) p1=a;是否语法正确? b) p2=a;呢? ? 为什么?请详述原因。
c) p=a; 是否正确???
可不可以认为二维数组名是一个指向指针的指针变量? 我的理由如下
如 int a[3][4];
书上说 C语言编译系统把二维数组a中的 a[0] , a[1] ,a[2]作为数组名来处理。
而数组名可以认为是一个存放地址值的指针变量名,其中的地址是数组第一个元素的地址
即 a[0][0] a[0][1] a[0][2]......
↑
a[0] 指向a[0][0]
即 a[0]={a[0][0],a[0][1],a[0][2],a[0][3]}
而a数组实际上又是一个一位数组,可视为a数组由a[0], a[1], a[2]三个元素组成,自然数组名a也可以认为是一个指针变量名,
所以 a={a[0],a[1],a[2]}
即a[0],a[1],a[2]
↑
a 即a指向a[0]这个元素。
所以可以得到 a→a[0]→a[0][0]
(以上箭头表示地址的指向)
a[0][0]是int类型的元素 那么a[0]是及类型为int的指针变量 那么a即为基类型为 基类型为int的指针变量 的指针变量, 即a为一个指向指针的指针变量。
这样说对么? 即当二维数组名作实参时,对应的形参可以为 指向指针的指针变量 吗? 若不对 我上述的 解释哪里错了? 请将详细一点 谢