注册 登录
编程论坛 C++教室

想不明白的一个问题

恶魔会哭泣 发布于 2007-08-25 23:53, 818 次点击

求教:

下面的代码为什么会出现数组的值发生改变?temp=a[9-n];只是把值给temp,并没有改变过数组里面的

值啊,怎么前后输出数组a中的值不一样呢?此代码并没有实现什么,只是我不明白为什么。

#include"iostream.h"
int main()
{
int n,temp,a[9];
for(int i=1;i<=9;i++)
{
a[i]=i;
}
for(i=1;i<=9;i++)
{
cout<<a[i];
}

cin>>n;
temp=a[9-n];

for(i=1;i<=9;i++)
{
cout<<a[i];
}
cout<<endl;

return 0;
}

10 回复
#2
aipb20072007-08-26 01:27
数组,几乎所有的跟坐标相关的记数都从0开始。
以后数数都 0 1 2 ……这样就好了。
#3
HJin2007-08-26 08:20
seems you are really a beginner --- in C/C++, index starts at 0, not 1.

study more, brother.

#4
blueboy820062007-08-26 09:16

发现个特别有意思的事,当我简单的把i的初值改为0时,(当然,我没把i<=9改为i<9,这样会越界的)
但程序却有个有意思的结果,我以前没遇到过,不知是为什么?
#include<iostream>
using namespace std;
int main()
{
int n,temp,a[9];
for(int i=0;i<=9;i++)
{
a[i]=i;
}
for(i=0;i<=9;i++)
{
cout<<a[i];
}

cin>>n;
temp=a[9-n];//真的不起作用????

for(i=0;i<=9;i++)
{
cout<<a[i];
}
cout<<endl;

return 0;
}
我输入4运行结果却是:
0123456789
4
0123456785

[此贴子已经被作者于2007-8-26 9:18:30编辑过]

#5
WenRick2007-08-26 09:25
回复:(blueboy82006)发现个特别有意思的事,当我简单...
C++数组的index从0开始,你定义的是a[9] 只有a[0]-a[8]是有效数字,a[9]的值是不确定的,数组越界了。
#6
aipb20072007-08-26 09:43
数组越界了是不会出现报错的,没有这种异常处理机制。
但是会导致程序出现问题,甚至崩溃,大程序中还很难debug。
#7
alan8232007-08-26 10:00
太深奥了!调试的时候是看不到a[9]的值的!
#8
恶魔会哭泣2007-08-26 13:13
感谢大家的教导,经过大家的解说得出问题所在,也就是因为数组下标是从0开始,而我的数组是定义为a[9],也就是说只有a[0],a[1],a[2],a[3].......a[8](能存储9个数);而当我用for循环的时候把i=9的时候给了数组a的下标,而数组a并没有a[9]这个地址,所以不能成功把9赋值给a[9]地址,所以用到的a[9]的值是随机的。

不知道这样总结可以不~~~~~~
#9
fangzhiya2007-08-27 21:32
a[9]的值并不是随机的,好像是产生了覆盖.
#10
雨中飞燕2007-08-27 21:35
如果你是用VC6,那么a[9]其实就是temp



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

请大家不要用TC来学习C语言
C/C++算法习题(OnlineJudge):[url]http://yzfy.org/[/url]
#11
狂人老大2007-08-28 14:33

#include"iostream.h"
int main()
{
int n,temp,a[9];
for(int i=0;i<=8;i++) //c中a[9]代表有9个元素,但是真正代表各个元素的是要从a[0]~~~a[8]的,不存在a[9]
{
a[i]=i;
}
for(i=0;i<=8;i++)
{
cout<<a[i];
}

cin>>n;
temp=a[9-n]; //这里似乎没有任何作用啊

for(i=0;i<=8;i++)
{
cout<<a[i]; //和前面的输出是一样的啊
}
cout<<endl;

return 0;
}

1