超级无敌侠客3 发表于 2014-8-11 15:28:02

对二维数组的赋值问题

正在学数组这一章。
我在对二维数组赋值的赋值的时候发现了一个问题,代码:#include <stdio.h>int main(int argc, char *argv[])
{
        int a={{3},4,5,{2}};
        return 0;
}
我调试了一下发现赋值出来分别是:{{3,0,0}{4,5,2,{0,0,0}}}
这是怎么回事



lzkjyang 发表于 2014-8-11 15:28:03

要看C语言的编译器的对多维数组负值规则,
int a={{3},4,5,{2}};
a 数组 首先会把{3}看成是{3,0,0}一行,负值给a
然后按顺序把{4,5,后面还少一个数,{2} 刚好里面有一个数,组成一组{4,5,2}给a
最后初始化值里没有数据啦,就按编译器的规则直接负值0,0,0给a
过程就是这样

其实,我们不可以做一个这样的实验 int a={{3},4,5,{2,1}};看这样负值,会是什么样的结果
当然,我们不推荐在写程序的时候搞得这么不可控,但是可以在学习过程中去测试,了解计算机会是一个什么样的思维处理,来增加我们的知识,我们一切要以电脑的实验结果为准,多试验。{:1_1:}

超级无敌侠客3 发表于 2014-8-11 15:29:01

下面那个图片弄错了

oggplay 发表于 2014-8-11 15:57:12

你这不是跟自己过不去么?要不就都写{},要不就都不写 int a={3,0,0,4,5,0,2,0,0};
int a={{3},{4,5,0},{2,0,0}};

Angel丶L 发表于 2014-8-11 19:14:29

楼上正解

流行语 发表于 2014-8-11 22:13:29

这个不知道为什么,看了一下汇编,可能是编译器的原因吧

745627933 发表于 2014-8-12 12:26:34

复制错误了

超级无敌侠客3 发表于 2014-8-12 13:00:44

谢谢

Beyond@ 发表于 2014-8-14 12:57:02

2维数组要么用{},要么都不用,这样比较好
页: [1]
查看完整版本: 对二维数组的赋值问题