【发布时间】:2015-04-25 07:35:22
【问题描述】:
我正在使用带有 malloc 的三重指针编写一个 3D 数组。我在下面的代码中将*ptrdate in (a)、*ptrdate[i] 和*ptrdate[i] 替换为*ptrdate,因为它们基本上都是Date 类型的指针,但访问维度不同。两种方式我得到了相同的结果。
问:作为sizeof的操作数有什么区别?
typedef struct {
int day;
} Date;
int main(){
int i, j, k, count=0;
int row=3, col=4, dep=5;
Date ***ptrdate = malloc(row * sizeof *ptrdate); //(a)
for (i=0; i<row; i++) {
ptrdate[i] = malloc(col * sizeof *ptrdate[i]); //(b)
for (j=0; j<col; j++) {
ptrdate[i][j] = malloc(dep * sizeof *ptrdate[i][j]); //(c)
}
}
【问题讨论】:
-
你的意思是作为
sizeof的操作数有什么区别? -
如果您不知道它们的含义,为什么要替换它们?要回答您的问题,请考虑表达式
ptrdate、*ptrdate和*ptrdate[i]的类型。 -
@juanchopanza , 最后一个
malloc在使用sizeof *ptrdate时会出错,对吧?第二个malloc也是如此,对吧? -
标记为重复的问题肯定不是重复的。请投票重新开放。
-
"它们基本上都是 Date 类型的指针"。这是一个大胆且不正确的说法。