Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用指针的指针引用矩阵_C_Arrays_Pointers - Fatal编程技术网

C 使用指针的指针引用矩阵

C 使用指针的指针引用矩阵,c,arrays,pointers,C,Arrays,Pointers,我对C非常陌生,我正在尝试获取一个int**数据来表示整数矩阵。 我首先创建了一个数组数组,然后尝试引用指向该数组的指针,如下所示: int **pointer; int data[num_rows][num_cols]; pointer = (int**) data[0]; 但我得到一个警告:从不同大小的整数转换为指针。 有人能帮我理解发生了什么,我如何将数组分配给int**指针?(我必须使用双指针)行int data[num_rows][num_cols]实际上并没有声明“数组数组!”相反

我对C非常陌生,我正在尝试获取一个int**数据来表示整数矩阵。 我首先创建了一个数组数组,然后尝试引用指向该数组的指针,如下所示:

int **pointer;
int data[num_rows][num_cols];
pointer = (int**) data[0];
但我得到一个警告:从不同大小的整数转换为指针。
有人能帮我理解发生了什么,我如何将数组分配给int**指针?(我必须使用双指针)

int data[num_rows][num_cols]
实际上并没有声明“数组数组!”相反,它声明了一个二维数组-在内存中,这将是一个单个数据块,大小为
num\u rows
x
num\u cols
x
sizeof(int)

要获得可以使用“双指针”访问的“数组数组”,通常必须使用
malloc
函数。如下所示:

int**pointer=malloc(num_rows*sizeof(int*);//分配一个指针数组
对于(int i=0;i
然后,您可以通过双指针访问任何[row][column]元素:

指针[行][列]=1234;
完成阵列后,请确保释放内存,如下所示:

for(int i=0;i
或者,给定
int数据[num_rows][num_cols]
for
循环中可以避免
malloc
调用,如下所示:

int**pointer=malloc(num_rows*sizeof(int*);//分配一个指针数组
对于(int i=0;i

请随时要求进一步澄清和/或解释。

您不能将数组分配给
int**
。数组是内存中的多个对象。数组不是指针。在大多数表达式中,数组会自动转换为指向其第一个元素的指针
data[0]
是一个数组,因此它被转换为指向其第一个元素的指针,从而生成
&data[0][0]
,这是
int
的地址。所以它是一个
int*
。它不是一个
int**
。要生成一个
int**
,您首先需要生成一个
int*
对象,然后您可以获取它的地址以获得一个
int**
。但这不是一条好路。为什么“必须使用双指针”?@EricPostpischil“数组是内存中的许多对象。”-请explain@nicomp:C 2018 6.2.5 20说“…数组类型描述具有特定成员对象类型的连续分配的非空对象集…”