C语言二维数组

时间:2014-03-31 00:44:02

标签: c arrays pointers

以下是我的代码段

int arr[1][1];
arr[0][0]=55;
arr[0][1]=56;
arr[1][0]=57;
arr[1][1]=58;
printf("\n arr[0,0]=%d",arr[0,0]);
printf("\n arr[0,1]=%d",arr[0,1]);
printf("\n arr[0,2]=%d",arr[0,2]);

我输出为 -12 -10 -8

有人能让我知道arr [0,0]的含义吗?

3 个答案:

答案 0 :(得分:3)

有人能让我知道arr [0,0]的含义吗?

arr[0,0]相当于arr[0]

如果有一系列逗号分隔的表达式,则最后一个表达式的值是整个表达式的值。作为扩展示例,

arr[10, 200, 50, 983, 52]相当于arr[52]

您需要重新编写程序以打印整数,正如您在格式说明符中使用%d所期望的那样。

printf("\n arr[0][0]=%d",arr[0][0]);

如果您要打印arr[0][1]arr[0][2],则需要将arr的定义更改为

int arr[1][3];

查看新代码

更改

int arr[1][1];

int arr[2][2];

否则,以下行将显示未定义的行为:

arr[0][1]=56;
arr[1][0]=57;
arr[1][1]=58;

答案 1 :(得分:1)

您正在使用逗号运算符。它计算到它的第二个操作数,所以你的代码相当于:

printf("\n arr[0,0]=%d",arr[0]);
printf("\n arr[0,1]=%d",arr[1]);
printf("\n arr[0,2]=%d",arr[2]);

这是三种不同方式的未定义行为:

  • arr[0]不是int(它是int的数组),因此使用%d打印它是不正确的
  • 维度为1,因此arr[1]arr[2]是越界访问。
  • 数组未初始化

要解决此问题,请更改为:

int arr[2][2] = { {1, 2}, {3, 4} };
printf("arr[0][0]=%d\n",arr[0][0]);
printf("arr[1][0]=%d\n",arr[1][0]);
printf("arr[0][1]=%d\n",arr[0][1]);
printf("arr[1][1]=%d\n",arr[1][1]);

答案 2 :(得分:0)

首先关于表达式(0,1)的值:

int chk = (0,1);
printf("%d",chk);

这就是你如何知道(0,1)的值。如果您需要更多详细信息,请参阅:this


因此arr[0,1]arr[1]

相同