以下是我的代码段
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]的含义吗?
答案 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]