c - C 中的锯齿状数组

标签 c arrays pointers jagged-arrays

<分区>

我在 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]);
    }

这里的表指向什么?

最佳答案

表指向动态指针数组的第一个元素。然后我们让每个指针都指向 for 循环内的一个整数数组。

这与 2 Dim 数组的不同之处在于,在矩阵中,所有行的列数都相同。

我们的要求是得到一个锯齿状的数组。取一个 5 列的数组 A 和另一个 4 列的数组 B,如果您将两者组合在不同的行中,您会得到一个锯齿状的数组。

既然我们必须赋值

table=calloc(rowNum+1,sizeof(int*));
//allocate an array of rowNum pointers and save to table
...
table[i] = calloc(colNum+1,sizeof(int));
//Yes it is pointing to the first element of the i-th row

换句话说,每个表[i]代表每一行,其中列数可变(此处由用户指定)。

我想这些链接可以帮到你

关于c - C 中的锯齿状数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38931265/

相关文章:

c - 如何在 C 中使用 igmp v3 加入多播组

c - 在 simulink 中运行用户定义的 block 时 Matlab 崩溃

c - 变量的初始化

php - 使用 XPath 从 XML 文档中提取特定于标签的数据

ios - AFNetworking 在 post 请求的 JSON 参数中发送数组

c++ - 指针是左值还是右值?

c++ - C++ 中的指针存储在哪里,在堆栈中还是在堆中?

c - 非同质数组的内存分配是如何工作的?

ios - 将数组元素与预定义值进行比较时出错?

c++ - 找不到内存泄漏