posts - 21,  comments - 20,  trackbacks - 0
今天看到一个求数组最大元素的代码,自己拿着看了看,改了改...遇到了这样的问题
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];
    
forint 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 阅读(737) 评论(2)  编辑 收藏 引用

FeedBack:
# re: int A[10]中有A[10]存在吗?
2008-12-04 22:50 | 许海林
我取消max = array1[0];这个赋值
array1[10]的输出均为-858993460;
说明array1[10]的值受到max的影响。
如果不取消的话,array1[10]的值始终等于max的值,
可以改变max的值试试。
Address of max:0x0012FF7C
Address of array1[10]:0x0012FF7C
他们是同一地址.....
-52 由补码表示 204(unsigned char) ,二进制1100,
-858993460=(((204+204*256) *256+204)*256+204)-power(2,32)
即-x[原码]+x[补码]=0,power(2,n)  回复  更多评论
  
# re: int A[10]中有A[10]存在吗?
2008-12-05 09:35 |
(array1+10)所指对象的类型被设置为与前面数组元素相同的类型,类似于容器的end()操作。(array1+10)可以用来判断数组是否到达终点,但解引用的值array1[10]是不确定的  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2008年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用链接

留言簿(2)

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜