【发布时间】:2022-01-21 18:13:23
【问题描述】:
作为题目,我想知道如何用sizeof指针初始化双指针。
例如
int **p=malloc(sizeof *p * rows);
for(size_t i = 0; i < rows; i++){
p[i]=malloc(sizeof ? * cols);
}
?应该填写什么。
任何帮助将不胜感激。
【问题讨论】:
-
sizeof **p会起作用,sizeof *p[0]或sizeof *p[i]或sizeof p[i][0]也会起作用。所有这些都是一样的,所以选择对你最清楚(在威胁中)的那个 -
一般来说,除非您有特殊要求,否则您永远不应该编写这样的代码。要分配一个二维数组,只需执行
int (*arr)[cols] = malloc( sizeof(int[rows][cols]) );。没有循环。除非你现在真的需要每个都有单独的尺寸或类似的特殊要求。 -
要分配一个指向“2D”数组的指针,代码可以使用简单的
int (*p)[row][cols] = malloc(sizeof *p);,但是访问看起来像(*p)[r][c]。
标签: c pointers dynamic-memory-allocation