在c中初始化双指针的正确方法是什么
What is the right way to initialize double pointer in c
如题,我想知道如何用sizeof
指针初始化双指针
例如
int **p=malloc(sizeof *p * rows);
for(size_t i = 0; i < rows; i++){
p[i]=malloc(sizeof ? * cols);
}
我应该填写什么?
。
如有任何帮助,我们将不胜感激。
看来你希望p
是一个可以容纳指针的数组,指针的个数是rows
。所以你可以像这样为 p
分配内存:
int ** p = malloc(sizeof(int *) * rows);
现在,如果您希望 p[i]
指向包含 cols
个整数的数组,请执行以下操作:
p[i] = malloc(sizeof(int) * cols);
What should I fill in ?.
一般来说当你有
X = malloc(sizeof ? * NUMBER);
?
将替换为 X
指向的类型。那可以简单地写成 *X
.
所以行:
p[i]=malloc(sizeof ? * cols);
是:
p[i]=malloc(sizeof *p[i] * cols);
请注意,二维数组的创建要简单得多。您只需要
int (*p)[cols] = malloc(sizeof *p * rows);
这里p
是指向cols
int
数组的指针。因此 sizeof *p
将是 cols
int
.
数组的大小
使用这种基于 VLA 的技术意味着您可以使用单个 malloc
分配二维数组。除了使代码更简单(即只有 1 malloc
)之外,它还确保整个 2D 数组在连续内存中,这可能会给你更好的缓存性能。
如题,我想知道如何用sizeof
指针初始化双指针
例如
int **p=malloc(sizeof *p * rows);
for(size_t i = 0; i < rows; i++){
p[i]=malloc(sizeof ? * cols);
}
我应该填写什么?
。
如有任何帮助,我们将不胜感激。
看来你希望p
是一个可以容纳指针的数组,指针的个数是rows
。所以你可以像这样为 p
分配内存:
int ** p = malloc(sizeof(int *) * rows);
现在,如果您希望 p[i]
指向包含 cols
个整数的数组,请执行以下操作:
p[i] = malloc(sizeof(int) * cols);
What should I fill in ?.
一般来说当你有
X = malloc(sizeof ? * NUMBER);
?
将替换为 X
指向的类型。那可以简单地写成 *X
.
所以行:
p[i]=malloc(sizeof ? * cols);
是:
p[i]=malloc(sizeof *p[i] * cols);
请注意,二维数组的创建要简单得多。您只需要
int (*p)[cols] = malloc(sizeof *p * rows);
这里p
是指向cols
int
数组的指针。因此 sizeof *p
将是 cols
int
.
使用这种基于 VLA 的技术意味着您可以使用单个 malloc
分配二维数组。除了使代码更简单(即只有 1 malloc
)之外,它还确保整个 2D 数组在连续内存中,这可能会给你更好的缓存性能。