如何动态地从数组中获取单元格值? [C89]
How to get a cell value from an array dynamically? [C89]
我有这个数组:
array[0][0] = 1;
array[0][1] = 2;
array[0][2] = 3;
array[0][3] = 4;
我怎么能做这样的事情?
int a = 0;
int b = 1;
printf("%d",array[a][b]);
C89 是一项要求。这是一个 MCVE:
int main(int argc, char *argv[])
{
int array[0][4] = {1, 2, 3, 4}, i = 0;
for (i = 0 ; i < 4 ; i++)
{
printf("%d\n", array[0][i]);
}
return 0;
}
输出:
1512079328
32764
0
3
您的数组第一维至少需要 1 个,第二维至少需要 4 个。
int array[1][4];
// ^ ^
原因:C 和 C++ 中的数组具有从 0
到 size - 1
的有效索引。所以如果你想访问索引 0
... 3
数组的大小必须至少是 4
.
问题的原因可能是 gcc "gnu mode" (gnu89),它是旧版编译器的默认编译器设置。它不会根据 C 标准编译您的代码,而是根据 gnu 发明的非标准。因此,您的严重错误已通过。
如果您改为使用 -std=c89 -pedantic-errors
将代码编译为 C 语言,您将获得以下诊断消息列表:
error: ISO C forbids zero-size array 'array' [-Wpedantic]|
warning: missing braces around initializer [-Wmissing-braces]|
warning: (near initialization for 'array[0]') [-Wmissing-braces]|
error: excess elements in array initializer|
error: (near initialization for 'array')|
原因如前所述,声明期间的数组大小与访问期间的数组索引不同。当修复并编译为 C 语言时,它编译干净并正确运行:
#include <stdio.h>
int main(int argc, char *argv[])
{
int array[1][4] = { {1, 2, 3, 4} };
int i;
for (i = 0 ; i < 4 ; i++)
{
printf("%d\n", array[0][i]);
}
return 0;
}
我有这个数组:
array[0][0] = 1;
array[0][1] = 2;
array[0][2] = 3;
array[0][3] = 4;
我怎么能做这样的事情?
int a = 0;
int b = 1;
printf("%d",array[a][b]);
C89 是一项要求。这是一个 MCVE:
int main(int argc, char *argv[])
{
int array[0][4] = {1, 2, 3, 4}, i = 0;
for (i = 0 ; i < 4 ; i++)
{
printf("%d\n", array[0][i]);
}
return 0;
}
输出:
1512079328
32764
0
3
您的数组第一维至少需要 1 个,第二维至少需要 4 个。
int array[1][4];
// ^ ^
原因:C 和 C++ 中的数组具有从 0
到 size - 1
的有效索引。所以如果你想访问索引 0
... 3
数组的大小必须至少是 4
.
问题的原因可能是 gcc "gnu mode" (gnu89),它是旧版编译器的默认编译器设置。它不会根据 C 标准编译您的代码,而是根据 gnu 发明的非标准。因此,您的严重错误已通过。
如果您改为使用 -std=c89 -pedantic-errors
将代码编译为 C 语言,您将获得以下诊断消息列表:
error: ISO C forbids zero-size array 'array' [-Wpedantic]|
warning: missing braces around initializer [-Wmissing-braces]|
warning: (near initialization for 'array[0]') [-Wmissing-braces]|
error: excess elements in array initializer|
error: (near initialization for 'array')|
原因如前所述,声明期间的数组大小与访问期间的数组索引不同。当修复并编译为 C 语言时,它编译干净并正确运行:
#include <stdio.h>
int main(int argc, char *argv[])
{
int array[1][4] = { {1, 2, 3, 4} };
int i;
for (i = 0 ; i < 4 ; i++)
{
printf("%d\n", array[0][i]);
}
return 0;
}