如题,我想知道如何用sizeof
指针初始化双指针。
例如
int **p=malloc(sizeof *p * rows);
for(size_t i = 0; i < rows; i++){
p[i]=malloc(sizeof ? * 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 数组在连续内存中,这可以为您提供更好的缓存性能。
关于c - 在c中初始化双指针的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70416548/