bz00 发表于 2022-1-22 15:33:43

请教数组的问题

#include <stdio.h>
int main ()
{
        int a = {1, 2, 3, 4, 5,6};
        int i;
       
        for (i=0; i<5; ++i)
                printf("%d\n",a);
               
        printf("%d\n",a);   
       
       
        return 0;
}

输出的结果是1 2 3 4 5 5

a超出数组定义,应该是无效值,为什么加了for语句,输出的结果是5,请教大家,谢谢

人造人 发表于 2022-1-22 15:36:05

输出的这个 5 就是有效值?
无效值的定义是什么?什么叫做无效值?
这个5就可以理解成 “无效值”

人造人 发表于 2022-1-22 15:37:49

那你说吧,不输出5,输出几合适?

人造人 发表于 2022-1-22 15:43:47

既然数组越界访问是未定义行为,那么不能输出几?不能输出 5 ?为什么?
既然都未定义行为了还有不能这么一说?

$ cat main.c
#include <stdio.h>
int main ()
{
      int a = {1, 2, 3, 4, 5,6};
      int i;

      for (i=0; i<5; ++i)
                printf("%d\n",a);

      printf("%d\n",a);


      return 0;
}
$ gcc -g -Wall -o main main.c
$ ./main
1
2
3
4
5
680017920
$ ./main
1
2
3
4
5
412153344
$ ./main
1
2
3
4
5
-37150208
$ ./main
1
2
3
4
5
1624091904
$ ./main
1
2
3
4
5
1042244352
$ ./main
1
2
3
4
5
1974735360
$

人造人 发表于 2022-1-22 15:47:44

未定义行为是什么?
未定义行为就是让编译器作者自由发挥,想怎么整就怎么整

人造人 发表于 2022-1-22 15:52:43

对于未定义行为,不管得到的结果有多么离谱,都是非常正常的

bz00 发表于 2022-1-22 17:01:38

{:5_91:}明白了。想怎么整就怎么整{:5_109:}

翼是孤独 发表于 2022-1-22 17:10:51

哈哈哈,这个其实也没啥用
我猜是因为 你文件比较小,申请内存的时候地址是 挨着的
a存的应该是i 的值
你在int i下面 int j =99;
a的值输出应该是99

bz00 发表于 2022-1-23 08:10:22

翼是孤独 发表于 2022-1-22 17:10
哈哈哈,这个其实也没啥用
我猜是因为 你文件比较小,申请内存的时候地址是 挨着的
a存的应该是i 的值 ...

{:5_95:}有问题再请教
页: [1]
查看完整版本: 请教数组的问题