发布网友 发布时间:2022-04-27 08:15
共8个回答
热心网友 时间:2022-04-27 09:45
for(int i=0;i<10;i++)热心网友 时间:2022-04-27 11:03
这个是C的特点 自由 *少 编译器 不会对数组越界 给警告追答不要去想 没意义的问题 牛角尖
a[num] = num 这种越界代码写出来 运行 就弹对话框 0x ??? 内存 不能为write ,
你说有意思吗
热心网友 时间:2022-04-27 12:37
内存给num分配的存储位置紧跟数组a后面,在printf(“%d”, a【num】)时输出了数组a后面地址上的内容,即num的值,该值只读不可修改追问的确,根据不同的环境,改值是会随机发生变化,和我猜想的一样,越界只是访问到了a[num]的这个num所在的位置,才造成的这一结果;谢谢大伙了,但是只能有一个最佳;追答我也用gcc编译器,打印的a【num】是num的值,这一假设的确成立
只是不知道是否可以当成一个惯例来使用
热心网友 时间:2022-04-27 14:29
越界数组的值是不确定的,WIN7下 VS2008编译运行以下代码热心网友 时间:2022-04-27 16:37
这个不行吧,就像上面两位说的不同编译器初始化的值可能不同,即使是这样初始化的,有可能其它数组或变量定义在这块地方,使得数值就会出现错误。你可以考虑用for循环定义好后使用,如果数组大小不明,应使用动态maloc,caloc定义。热心网友 时间:2022-04-27 19:01
会很危险,会不会是巧合呢,在Debug下,编译器可能做了些什么,试试Release下呢,毕竟项目都是通过Release发布的追问GCC编译的
热心网友 时间:2022-04-27 21:43
不能的,越界之后到了其他变量的内存空间 (不一定是本程序) 值是不确定的热心网友 时间:2022-04-28 00:41
1 你的结论你只在一台电脑上的特定环境下测试过,不表示重新测试,或者换台电脑测试还有这个结论。追答#define num 10
int b[1000]; //------->在给a分配存储单元前,先分配给b,数组a的元素值可能发生变化。
int a[num];