一个微妙的错误

大家看看这一段代码,然后想想会输出什么?

#include <iostream>

using namespace std;

 

int array[]={23,24,26,78};

#define SIZE (sizeof(array)/sizeof(array[0]))

 

int main(char argc,char ** argv){

    int d=-1;

    if(d<=SIZE)cout<<"hello wprld"<<endl;

    else cout<<"I an going to sleep"<<endl;

    return 0;

}

 

 

 

 

 

 

 

 答案:

 

 为什么呢?

解释一下,因为sizeof返回的是unsigned类型的数据,然后也就是说SIZE为unsigned int,然后在做比较的时候,也就是在做“d<=SIZE”时候,自动把d也转成unsigned int了。。然后,。。。。然后。。。就没有然后了。

 

两个建议:

首先,尽量避免使用unsigned;

其次,#define SIZE (sizeof(array)/sizeof(array[0]))最好不要写成#define SIZE (sizeof(array)/sizeof(int)。原因很简单,就是前者的写法更加稳健,谁知道什么时候array的类型被你改了,是吧。。。。。。。。。。。。

 

 

 

 

 

posted on 2013-03-25 01:03  苯苯吹雪  阅读(176)  评论(0编辑  收藏  举报

导航