2D阵列的名称是否像在1D数组中那样在C中给出其基址?如何将2d数组的基址存储在指针变量中?
答案 0 :(得分:3)
它衰减到指向第一个元素的指针:
int a[5][7];
衰败到
int (*pa)[7] = a;
实际上,pa
中存储的值与指向int
的第一个a
元素的指针的值相同,但获取指针的值是正确的。 a
的第一个元素是使用
int *p_elm = &(a[0][0]);
或等效
int *p_elm = &(pa[0][0]);
但是,请注意,指向第一个元素的指针不能(严格地)被视为指向N*M
数组开头的指针;见例如http://www.lysator.liu.se/c/c-faq/c-2.html#2-11
答案 1 :(得分:2)
是的,您将地址存储为:
int *p = &a[0][0];
答案 2 :(得分:2)
2D数组本质上是一维数组,其中每个元素本身就是一个数组。
数组的名称等同于& arrayName [0]。
指定此地址的指针与以前一样,如:
int myArray[5][5];
int (*arrayptr)[5] = myArray;
这表示arrayptr
是一个指向5个整数数组的指针。由于myArray
是第一个元素的地址,即int[5]
,我们的声明很好。
然而,当您取消引用此指针时,您将获得第一个元素,即数组。因此,您可以执行以下操作:
(*arrayptr)[3]; // parens necessary for precedence issues
访问嵌套在“外部数组”的第一个元素内的数组中的第3个元素。 它相当于
myArray[0][3];
正在发生的事情是你解除引用arrayptr
会产生一维数组(在这种情况下大小为5)..然后你要求这个1D数组的第4个元素。
现在,如果你要找的是矩阵的左上角,你会想要:
int *topleft = &(myArray[0][0]);
答案 3 :(得分:0)
使用地址运算符指向base的偏移量。
char base[2][2];
int *basepointer = &base;
答案 4 :(得分:0)
我想特别回答你的问题。
每当您传递2D数组的名称时,该数组的名称将被衰减为指向第一个元素的指针,
在多维数组中,由于多维数组是数组数组,因此第一个元素将是数组本身。
因此,2D数组的名称将衰减为指向数组的指针,即指向第一行的指针,其中元素的数量等于2D数组中的列数。
记住在函数中接收2D数组作为指向数组的指针而不是指向指针的指针。
this.refs.childRef.getState();