我从C语言中学到的是,int **matrix是指向一个指向整数的指针。当我们想要创建一个矩阵时,我们将malloc一组连续的指针!因此,第一个指针指向一个指向整数的指针,或者它可以指向一组指向整数的指针(第一个指针当然会指向第一个指针的地址)。
简要指向1个指针(仅有1个),是否与从一组指针中指向第一个指针相同?
我认为答案在这个问题中:什么是某物的数组?
简要指向1个指针(仅有1个),是否与从一组指针中指向第一个指针相同?
我认为答案在这个问题中:什么是某物的数组?
sizeof()
和它们分配的内容方面。但是,它们有时可以互换使用,因为它们都本质上表示一个地址。*(p + n)
(与 p[n]
和 n[p]
相同)解释为对 p
的地址加上 n
乘以 p
指向的类型元素的大小的访问,因此现在更容易理解,您可以将指针解释为数组的开头。int **p
解释为指向 int
指针的指针。在这个指针的内存之后,可能会跟随 n
个 int
指针,而每个指针都代表一个 int
的地址,在此之后,又可能会跟随 n
个 int
。因此,即使 int **p
实际上是指向类型为 int
的指针的指针,也可以将其解释为二维数组。从您的指针开始到数组中有多少元素是您无法从数组或指针中知道的,这就是为什么通常会有一个类似于 n_size
或 m_size
参数的原因。type[]
会“衰减”为 type *
,例如 f(type *a)
[]
运算符访问元素,则 a[i]
总是解析为 *(a + i)
++a
#include <stdio.h>
#include <stdlib.h>
int main()
{
int matrix[2][3];
int **m;
m=malloc(sizeof(int *)*2);
m[0]=malloc(sizeof(int)*3);
m[1]=malloc(sizeof(int)*3);
m=matrix;
return 0;
}