今天看到一个求数组最大元素的代码,自己拿着看了看,改了改...遇到了这样的问题
class Array_max
{
public:
void set_value();
void max_value();
void show_value();
private:
int array1[10];
int max;
};
int array1[10],set_value()来从用户输入
void Array_max::set_value()
{
for(int i=0;i<10;++i)
cin>>array1[i];
for( int i = 0;i<=10;++i)
cout << "array1["<< i << "]= " << array1[i] << " " << endl;
}
假设输入1,2,3,4,5,6,7,8,9,10.加入cout,在DEBUG下,输出为1,2,3,4,5,6,7,8,9,10,-858993460,release下,输出为1,2,3,4,5,6,7,8,9,10,1
接着,在max_value()中
void Array_max::max_value()
{
max=array1[0];
for(int i=1;i<=10;i++)
{
if(array1[i]>max)
{
max=array1[i];
}
cout << "array1["<< i << "]= " << array1[i] << " " << endl;
}
}
输出结果就成了1,2,3,4,5,6,7,8,9,10,10
也就是说A[10]就变成了数组中最大值的元素,我改变输入值与大小顺序依然如此,迷惑啊,难道...想不通
你评论给的太快了...昨天关机后就想通了这个问题了.编译器并不会检查数组下标是否越界,array1[10]其实已经越界了,但是编译器不会报错.int array1[10]中没有array1[10].因为下标越界,所以array1[10]所指向的,是紧跟着array1[]被分配的内存空间的max,而且max也正好是整形,所以可以正常输出array1[10].
posted on 2008-12-04 21:15
Niino 阅读(816)
评论(2) 编辑 收藏 引用