首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语言--二维数组

问C语言--二维数组
EN

Stack Overflow用户
提问于 2014-03-31 08:44:02
回答 3查看 49关注 0票数 1

下面是我的代码片段

代码语言:javascript
复制
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

谁能告诉我arr0,0是什么意思?

EN

回答 3

Stack Overflow用户

发布于 2014-03-31 09:03:49

Q谁能告诉我arr0,0是什么意思?

A arr[0,0]等同于arr[0]。

当您有一系列逗号分隔的表达式时,最后一个表达式的值就是整个表达式的值。作为扩展的例子,

arr[10, 200, 50, 983, 52]等同于arr[52]

正如您在格式说明符中使用%d时所期望的那样,您的程序需要修改以打印一个整数。

代码语言:javascript
复制
printf("\n arr[0][0]=%d",arr[0][0]);

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

代码语言:javascript
复制
int arr[1][3];

查看您的新代码

变化

代码语言:javascript
复制
int arr[1][1];

至

代码语言:javascript
复制
int arr[2][2];

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

代码语言:javascript
复制
arr[0][1]=56;
arr[1][0]=57;
arr[1][1]=58;
票数 3
EN

Stack Overflow用户

发布于 2014-03-31 09:05:16

您正在使用逗号运算符。它的计算结果是它的第二个操作数,所以你的代码等同于:

代码语言:javascript
复制
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]不是一个整数(它是一个整数数组),所以用accesses.
  • The打印它是不正确的,因为维数是1,所以arr[1]和arr[2]是越界的,accesses.
  • The数组没有初始化

要解决此问题,请更改为类似以下内容:

代码语言:javascript
复制
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]);
票数 1
EN

Stack Overflow用户

发布于 2014-03-31 09:07:30

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

代码语言:javascript
复制
int chk = (0,1);
printf("%d",chk);

这就是你知道(0,1)的值的方法。如果您想了解更多详细信息,请参阅:this。

因此,arr[0,1]与arr[1]相同

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22751923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档