今天看到一个求数组最大元素的代码,自己拿着看了看,改了改...遇到了这样的问题
 class Array_max
class Array_max 
 {
{
 public:
public:
 void set_value();
    void set_value();
 void max_value();
    void max_value();
 void show_value();
    void show_value();
 private:
private:
 int array1[10];
    int array1[10];
 int max;
    int max;
 };
};
int array1[10],set_value()来从用户输入
 void Array_max::set_value()
void Array_max::set_value()
 {
{
 for(int i=0;i<10;++i)
    for(int i=0;i<10;++i)
 cin>>array1[i];
        cin>>array1[i];
 for( int i = 0;i<=10;++i)
    for( int i = 0;i<=10;++i)
 cout << "array1["<< i << "]= " << array1[i] << " " << endl;
        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()
void Array_max::max_value()
 {
{
 max=array1[0];
    max=array1[0];
 for(int i=1;i<=10;i++)
    for(int i=1;i<=10;i++)
 {
    {
 if(array1[i]>max)
        if(array1[i]>max)
 {
        {
 max=array1[i];
            max=array1[i];
 }
        }
 cout << "array1["<< i << "]= " << array1[i] << " " << endl;
        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 阅读(868) 
评论(2)  编辑 收藏 引用