Anny黄 发表于 2015-5-3 22:03:13

刚刚开始学数组,一大堆的疑问

<div class="blockcode"><blockquote>#include<stdio.h>
void main()
{
        int a,b={0,1,1,1,1,1,1,1,11,1};

        for(a=9;a>=0;a--)
        {
                printf("%d\n", b);
        }
}</blockquote></div><br />


就是上面这个代码,使用for语句循环打印这个数组的值,但是那里我故意填了111的(我只定义了10个应该会报错的吧)。我想看看会怎样的,但编译器没报错,他没有,没有报错呀!还打印了这个结果,到底怎么个情况呢,求解答!刚刚开始接触数组

仰望天上的光 发表于 2015-5-3 22:25:25

用C语言标准的话来解释,数组越界会产生“不可预知的错误”。当然,如果你C语言已经学透,并且想专研C语言标准之下的东西,你可以研究下汇编语言。。。以及它和C语言之间的关系。。。研究完就知道,数组越界后编译器的行为是可以预测的(但这个对于C语言初学者完全没必要,你现在要做的,是准售规则,尽快能够用C语言写出实用的程序)

ipry0816 发表于 2015-5-3 22:34:22

Mr.屎壳螂 发表于 2015-5-3 22:38:17

你这个应该是越界了~然后b中取得是一个完全没有意义的数据,可能只是刚好取到了920,我运行之后是0.

ipry0816 发表于 2015-5-3 22:40:29

Anny黄 发表于 2015-5-4 23:17:03

仰望天上的光 发表于 2015-5-3 22:25
用C语言标准的话来解释,数组越界会产生“不可预知的错误”。当然,如果你C语言已经学透,并且想专研C语言 ...

哦,明白了!!谢谢!

Anny黄 发表于 2015-5-4 23:18:09

Mr.屎壳螂 发表于 2015-5-3 22:38
你这个应该是越界了~然后b中取得是一个完全没有意义的数据,可能只是刚好取到了920,我运行之后是0.

谢谢帮忙解释!!

Anny黄 发表于 2015-5-4 23:18:40

ipry0816 发表于 2015-5-3 22:40
sorry,没看题!

{:1_1:}

Zhangchi 发表于 2015-5-6 23:11:23

前提声明: 我也是新手 猜的 。
    你输出的是a,应该就是 a数组首地址 的后 111 位 ,根据内存来看,应该输出的是内存中的数字。是不可预知的数字。

Anny黄 发表于 2015-5-7 22:37:51

Zhangchi 发表于 2015-5-6 23:11
前提声明: 我也是新手 猜的 。
    你输出的是a,应该就是 a数组首地址 的后 111 位 ,根据内存来看 ...

版主大大说我们初学的不需要知道怎么得到那个数的,只需要先学会常用的那些就OK拉!这个他们说是越界了

零度非安全 发表于 2015-5-8 08:24:20

前面的版主已经解释的很详细了,在这里我也不做过多的解释了{:7_131:}
页: [1]
查看完整版本: 刚刚开始学数组,一大堆的疑问