【发布时间】:2016-12-20 06:04:19
【问题描述】:
我在寻找 C 中的锯齿状数组时遇到了这段代码。我发现很难理解对 calloc 函数进行类型转换的必要性,因为 calloc() 和 malloc() 返回指针。
int rowNum,colNum,i,j;
int** table;
scanf("%d",&rowNum);
为什么我们使用指向指针的指针,下面的行返回什么?
table = (int**)calloc(rowNum+1,sizeof(int*));
for(i=0;i<rowNum;i++)
{
printf("The size of %d row",i+1);
scanf("%d",&colNum);
table[i] = (int*) calloc(colNum+1,sizeof(int));
上面一行发生了什么?指针是否指向第 i 行的基元素?
for(j=1;j<=colNum;j++)
{
//reading the elements in the row
scanf("%d",&table[i][j]);.
}
table[i][0] = colNum;
printf("The size of row [%d]= %d",i+1,table[i][0]);
}
table 指向这里的是什么?
【问题讨论】:
-
请以可读的方式格式化您的代码。不,
malloc和calloc不需要强制转换,甚至不应该强制转换,因为这会隐藏细微的错误。否则你的问题不是很清楚。你需要解释一下指针的作用吗? -
所以问题在于从
calloc和malloc函数返回的指针的类型转换?没有其他的?请尝试更明确。也可能与Do I cast the result of malloc? 重复(如果这是您唯一的问题)。 -
1) 你不需要这样的强制转换 2) 为什么要为多行和多列分配空间?,数组在 C 中以 0 为基数,使用
table = calloc(colNum, sizeof(int));并将for(j=1;j<=colNum;j++)更改为 @ 987654332@ -
使问题更清晰。 @JensGustedt 每行的第一个元素用于存储该行中的元素数。
标签: c arrays pointers jagged-arrays