鱼C论坛

 找回密码
 立即注册
查看: 1151|回复: 8

[已解决]请教数组的问题

[复制链接]
发表于 2022-1-22 15:33:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

a[6]超出数组定义,应该是无效值,为什么加了for语句,输出的结果是5,请教大家,谢谢
最佳答案
2022-1-22 15:43:47
既然数组越界访问是未定义行为,那么不能输出几?不能输出 5 ?为什么?
既然都未定义行为了还有不能这么一说?
$ cat main.c
#include <stdio.h>
int main ()
{
        int a [6] = {1, 2, 3, 4, 5,6};
        int i;

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

        printf("%d\n",a[6]);


        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
$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-22 15:36:05 | 显示全部楼层
输出的这个 5 就是有效值?
无效值的定义是什么?什么叫做无效值?
这个5就可以理解成 “无效值”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-22 15:37:49 | 显示全部楼层
那你说吧,不输出5,输出几合适?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-22 15:43:47 | 显示全部楼层    本楼为最佳答案   
既然数组越界访问是未定义行为,那么不能输出几?不能输出 5 ?为什么?
既然都未定义行为了还有不能这么一说?
$ cat main.c
#include <stdio.h>
int main ()
{
        int a [6] = {1, 2, 3, 4, 5,6};
        int i;

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

        printf("%d\n",a[6]);


        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
$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-22 15:47:44 | 显示全部楼层
未定义行为是什么?
未定义行为就是让编译器作者自由发挥,想怎么整就怎么整
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-22 15:52:43 | 显示全部楼层
对于未定义行为,不管得到的结果有多么离谱,都是非常正常的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-22 17:01:38 | 显示全部楼层
明白了。想怎么整就怎么整
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-22 17:10:51 | 显示全部楼层
哈哈哈,这个其实也没啥用
我猜是因为 你文件比较小,申请内存的时候地址是 挨着的
a[6]存的应该是i 的值
你在int i下面 int j =99;
a[7]的值输出应该是99
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-23 08:10:22 | 显示全部楼层
翼是孤独 发表于 2022-1-22 17:10
哈哈哈,这个其实也没啥用
我猜是因为 你文件比较小,申请内存的时候地址是 挨着的
a[6]存的应该是i 的值 ...

有问题再请教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-4 00:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表