【发布时间】:2026-02-23 07:25:03
【问题描述】:
到目前为止,我确实为这样的矩阵分配了内存:
int **p,n;
scanf("%d",&n);
p=malloc(n*sizeof(int));
for(int i=0;i<n;i++)
p[i]=malloc(n*sizeof(int));
- 但有人告诉我这样做:
int **p,n;
scanf("%d",&n);
p=malloc(n*sizeof*p);
for(int i=0;i<n;i++)
p[i]=malloc(n*sizeof*p);
sizeof(p) 不是 0 因为没有分配??
哪个好?
【问题讨论】:
-
这是错误的-
p=malloc(n*sizeof(int));。应该是-p=malloc(n*sizeof(int *));。 -
你能告诉我为什么吗?
-
因为
p不是指向int的指针,而是指向int的指针。 -
第二版代码的好处就是可以避免这样的错误。此外,如果您更改
p的类型,则无需将调用调整为malloc -
第三种选择:
int (*p)[n] = malloc(n * sizeof *p);
标签: c