如何将二维数组分配给**指针?这是我想要完成的内容。
int arrray [2][3];
int **pointer = array;
so pointer[0][1]= 1;
需要帮忙吗? 提前致谢。
要声明指针,请这样写:
int (*pointer)[3] = array;
但这在C++中是极其糟糕的。如果您解释一下您的一般目的,也许您可以找到一个更好的解决方案(涉及向量或其他东西)。
array
的数组,将作为rvalue-expression使用的表达式array
转换(通常称为衰减)为指向第一个元素的指针。也就是说,array
被转换为&array[0]
,其类型为T*
。现在,在二维数组T中,对于给定类型U和大小N,即U [N]
,这意味着在int array[3][3];
中,array
会衰减为&array[0]
,其类型为int (*)[3]
。结果表达式不再是数组,而是指针,不能进一步衰减。 - David Rodríguez - dribeas*array
相比较,其中array
将会衰减为&array[0]
,产生*&array[0]
,它是类型为array of 3 int
的指针,因此它本身会衰减为第一个元素的地址:&(*&array[0])[0]
,这等同于&array[0][0]
。这可能令人困惑,但重要的是,当数组用作rvalue-expression时,它将被转换为等效的指针,但只在这种情况下,并且转换后的指针不再是数组,也不能再次转换... - David Rodríguez - dribeas
pointer[n][i];
是有效的。 - Clifford