c - 了解此输入中的动态分配,c

标签 c arrays

假设我想输入一个整数的平方。在每一行上,每对整数由一个空格分隔。所以下面的代码工作得很好:

//size of the square
int N;
scanf("%d",&N);
int **c;
c = malloc(N*sizeof(int*));

for (i=0;i<N;i++)
{   c[i] = malloc(2*sizeof(int));
    for (j=0;j<2;j++)
    {scanf("%d",&c[i][j]);}
}

所以在这里我不明白为什么没有考虑空间(所以它为什么有效 :-))?相反,如果我使用 n 数组 c[N][N],它就不会起作用,因为每个空格都会被解释为数组的输入

最佳答案

int N;
scanf("%d",&N);
int c[N][N];   /* Error */

c[][] 的大小必须在创建时已知。这意味着无法从输入中动态获取 N。

编辑: 正如 Jonathan Leffler 所指出的,一些编译器支持在运行时确定数组大小。它是 C99 标准的一部分,但在随后的 C11 标准中它被设为可选。

虽然可选功能可能很棒,但它们会降低程序的可移植性。

关于c - 了解此输入中的动态分配,c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12180052/

相关文章:

使用带有 char 字符串和数组的结构的 C 程序

php - 如何使用 PHP 连接两个数组?

c - linux/ext2_fs.h 有什么问题?

c - 我已经包含了一个头文件,但在尝试运行 make 时仍然未定义

c++ - 为什么编译器在显然没有错误的情况下在这里提示?

arrays - 防止同步执行完成处理程序

python - 如何在递归中创建整数数组?

javascript - ng-重复对象中的名称数组,但不起作用

c - 快速排序中的无限循环

c - 使用 poll() 运行一个简单的 TCP 服务器,如何触发事件 "artificially"?