这个题目看不懂求助
c语言吧
全部回复
仅看楼主
level 1
void main(){ int i,a[5]; for(i=0;i<5;) a[i++]=i; for(i=5;i>=0;i--) printf("%d",a[i]); } 为什么数组可以输出6个数字?不是下标最多4吗?
2007年11月01日 03点11分 1
level 1
这是个越界读取的...不能读去a[5];要从i=4开始...for(i=4;i>=0;i--) printf("%d",a[i]);
2007年11月01日 03点11分 2
level 0
我也这么认为啊,可是我实验过,居然可以输出6个数字,是543210,我晕啊
2007年11月01日 03点11分 3
level 1
没什么不可以;你让它读取6个;它就读取6个.读取10个也可以;因为栈是可读;系统不会阻止它读取;#include
void main() { int i,a[5]; for(i=0;i<5;) a[i++]=i; for(i=9;i>=0;i--) printf("%d\n",a[i]); }
2007年11月01日 03点11分 4
level 1
#include
void main() { int i,a[5]; for(i=0;i<5;) { a[i]=i; ++i; } for(i=5;i>=0;i--) printf("%d",a[i]); }
2007年11月01日 03点11分 5
level 0
那么为什么输出的第一个是5呢??应该是随机值才对啊
2007年11月01日 03点11分 6
level 0
我就是郁闷,为什么我循环了赋值才5次啊,怎么给了6个值?
2007年11月01日 04点11分 7
level 1
都跟你说了;a[5]是超范围的读取;你还想不通;还真以为你数组里有6个值告诉你a[5]其实不是在数组里;而是数组外;在VC++6.0下是跟变量i是同一个东西;再弄个程序给你看;再不懂;就算了...#include
void main() { int i,a[5]; for(i=0;i<5;) a[i++]=i; i=25; printf("i=%d\n",a[5]); i=6; printf("i=%d\n",a[5]); i=8; printf("i=%d\n",a[5]); i=12; printf("i=%d\n",a[5]); i=-1; printf("i=%d\n",a[5]); i=10; printf("i=%d\n",a[5]); i=45; printf("i=%d\n",a[5]); }
2007年11月01日 04点11分 8
level 7
楼上的楼上怎么知道数组和变量i排在一起..好厉害好厉害.
2007年11月01日 07点11分 10
level 0
不一定排在一起的,请看这个帖子后面的讨论:http://post.baidu.com/f?z=275599309&ct=335544320&lm=0&sc=0&rn=50&tn=baiduPostBrowser&word=c%D3%EF%D1%D4&pn=50
2007年11月01日 07点11分 11
level 1
不一定a[15]就是i;这要看编译器是怎么安排i 和 数组;不同的编译器有不同的做法;所以我说 "在VC++6.0下"
2007年11月01日 07点11分 12
level 7
不怎么懂 不过看出很深奥
2007年11月01日 07点11分 13
level 1
多出的数是随机产生的,变量的实质在c中应该是一个内存地址的别名,没有赋值前,其中的值是随机的
2007年11月01日 09点11分 14
level 0
为什么a[5]=5? 不是随即数?
2007年11月01日 09点11分 15
level 7
for(i=5;i>=0;i--) ??应该 for(i=4;i>=0;i--)
2007年11月01日 11点11分 16
level 6
难道i紧接在a[4]后面?
2007年11月01日 12点11分 17
1