c - 在c中初始化双指针的正确方法是什么

标签 c pointers dynamic-memory-allocation

如题,我想知道如何用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是一个指向colsint数组的指针。因此 sizeof *p 将是 cols int 数组的大小。

使用这种基于 VLA 的技术意味着您可以使用单个 malloc 分配二维数组。除了使代码更简单(即只有 1 个 malloc)之外,它还确保整个 2D 数组在连续内存中,这可以为您提供更好的缓存性能。

关于c - 在c中初始化双指针的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70416548/

相关文章:

使用 Vivado HLS 2019 更改订单分析设计文件我的项目

c - 链表 — 删除包含素数的节点

c - Linux 中的套接字连接

c - C 中的简单链表函数

c++ - 两个指针什么时候可以比较?

c - 如何正确访问此结构中的指针?

c - 双指针 vs 指针数组(**array vs *array[])

c++ - 如何为嵌套指针结构动态分配内存?

c - 解压缩在两者之间停止,并且输出文件中填充了零(黑色像素)?

c - C 中数组的动态分配