请教数组的问题
#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,请教大家,谢谢 输出的这个 5 就是有效值?
无效值的定义是什么?什么叫做无效值?
这个5就可以理解成 “无效值”
那你说吧,不输出5,输出几合适? 既然数组越界访问是未定义行为,那么不能输出几?不能输出 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
$ 未定义行为是什么?
未定义行为就是让编译器作者自由发挥,想怎么整就怎么整
对于未定义行为,不管得到的结果有多么离谱,都是非常正常的 {:5_91:}明白了。想怎么整就怎么整{:5_109:} 哈哈哈,这个其实也没啥用
我猜是因为 你文件比较小,申请内存的时候地址是 挨着的
a存的应该是i 的值
你在int i下面 int j =99;
a的值输出应该是99 翼是孤独 发表于 2022-1-22 17:10
哈哈哈,这个其实也没啥用
我猜是因为 你文件比较小,申请内存的时候地址是 挨着的
a存的应该是i 的值 ...
{:5_95:}有问题再请教
页:
[1]