关于用二级数组去引用二级指针的问题
例如如下代码:
int array[2][2] = {{1, 1}, {2, 2}};
int **p = array;
int b = p[0][0];
为什么这样写会报段错误呢?
我的理解
我理解p可以表示数组array的首元素地址,那么按照数组下标的引用方式不应该为*(p + (i * col + j) * sizeof(int))吗,既然p指向了首元素地址,那么数组方式引用后不该指向对应的元素,希望有人能够指出这段理解中的错误。
例如如下代码:
int array[2][2] = {{1, 1}, {2, 2}};
int **p = array;
int b = p[0][0];
为什么这样写会报段错误呢?
我理解p可以表示数组array的首元素地址,那么按照数组下标的引用方式不应该为*(p + (i * col + j) * sizeof(int))吗,既然p指向了首元素地址,那么数组方式引用后不该指向对应的元素,希望有人能够指出这段理解中的错误。
指针的含义是表示了一个变量的地址, 那么指针的指针,就是表示一个指针的地址。
int ** 存储的就是一个指针的指针,可是 指针需要用变量的地址去做初始化才真正有意义,否则就是NULL, 对int **的初始化,就应该是从内向外进行,先初始化一个指针,在用指针来初始化这个指针的指针,(你代码中,int array[2][2]虽然表示的是二维数组,但是array本质还是一个二维数组的首地址,用一个指针存储就够了)
这里挺绕的,多用代码试试~