在书上看到说这两段程序等价:
int a[NUM_ROWS][NUM_COLS], (*P)[NUM_COLS], i;
for (p = &a[0]; p<&a[NUM_ROWS]; p++)
(*p)[i]=0;
int a[NUM_ROWS][NUM_COLS], (*P)[NUM_COLS], i;
for (p = a; p<a+ NUM_COLS; p++)
(*p)[i]=0;
书上又说a是指向a的第0行的指针,类型是 int(*) [NUM_COLS], 而a[0]是指向第0行第0个元素的指针,类型为 int *
那在第一段程序里 &a[0]又是什么意思?a[0]已经是指针了,又对它取地址了那不就是指针的地址了,而不是数组的第0行的地址了吗?
求大神解释,谢谢!
在二维数组a中,a[0][0]是第一行的第一个元素,
a[0]则是指向第一行第一个元素的指针即a[0] = &a[0][0];
a是数组名,也是指向第一行的第一个元素的指针所以a = &a[0][0];
至于 a = &a[0] ,因为a[0]并不是从 其他地方 弄了个空间保存&a[0][0]; 它就在这个数组的空间里,楼主看一下数组在内存中怎样保存估计就明白了
最后附上个小程序希望有用
#include <iostream>如果我的回答不好请见谅,我的表达能力不是 很好