今天看到一個求數(shù)組最大元素的代碼,自己拿著看了看,改了改...遇到了這樣的問題
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]就變成了數(shù)組中最大值的元素,我改變輸入值與大小順序依然如此,迷惑啊,難道...想不通
你評論給的太快了...昨天關機后就想通了這個問題了.編譯器并不會檢查數(shù)組下標是否越界,array1[10]其實已經(jīng)越界了,但是編譯器不會報錯.int array1[10]中沒有array1[10].因為下標越界,所以array1[10]所指向的,是緊跟著array1[]被分配的內存空間的max,而且max也正好是整形,所以可以正常輸出array1[10].
posted on 2008-12-04 21:15
Niino 閱讀(838)
評論(2) 編輯 收藏 引用