【发布时间】:2012-04-15 20:07:55
【问题描述】:
如何将二维数组分配给**指针? 这就是我想要做的想法
int arrray [2][3];
int **pointer = array;
so pointer[0][1]= 1;
所以有什么帮助吗? 在此先感谢
【问题讨论】:
如何将二维数组分配给**指针? 这就是我想要做的想法
int arrray [2][3];
int **pointer = array;
so pointer[0][1]= 1;
所以有什么帮助吗? 在此先感谢
【问题讨论】:
像这样声明指针:
int (*pointer)[3] = array;
但这在 C++ 中非常讨厌。如果您解释了您的一般目的是什么,也许您可以找到更好的解决方案(涉及向量之类的解决方案)。
【讨论】:
pointer[n][i];是有效的.
简单的答案是你不能。二维数组是保存每一行的连续内存块,而指向指针的指针可以引用指向包含整数的不同内存位置的指针所在的内存位置。
另一方面,您可以创建一个单独的数据结构,以您想要的方式保存指向元素的指针(即创建一个指针数组,将这些指针初始化为每行的开头,并使用指向该元素的指针pointer) 的指针数组,但它根本没有用,反而会使一切变得不必要地复杂化。
这个问题可能来自于普遍的误解,即数组和指针是相同的,但事实并非如此。数组可以衰减为指向数组第一个元素的指针(并且会经常这样做),但该指针的类型是第一个元素的类型。在二维数组中,第一个元素的类型是内部数组,而不是基本元素类型。
【讨论】:
array 的数组,用作 rvalue-expression 的表达式 array 被转换(通常称为衰减)为指向第一个元素的指针。也就是说,array 被翻译成&array[0],它的类型是T*。现在,在二维数组中,对于给定类型 U 和大小 N,T 是 U [N],这意味着在 int array[3][3]; 中,array 衰减为 &array[0],其类型为 int (*)[3]。结果表达式不再是一个数组,而是一个指针,不能进一步衰减。
*array 进行比较,其中array 将衰减为&array[0] 产生*&array[0],其类型为array of 3 int因此将自己衰减到第一个元素的地址:&(*&array[0])[0],相当于&array[0][0]。这可能令人困惑,但重要的是,当数组用作 rvalue-expression 时,它将被转换为等效指针,但仅在这种情况下,转换后的指针不再是一个数组,不能再次转换...