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

#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的类型被你改了,是吧。。。。。。。。。。。。

 

 

 

 

 

相关文章:

  • 2022-02-28
  • 2021-06-29
  • 2022-12-23
  • 2021-12-19
  • 2021-06-21
  • 2021-06-29
  • 2021-04-28
  • 2022-12-23
猜你喜欢
  • 2021-12-11
  • 2021-10-11
  • 2021-09-17
  • 2022-01-23
  • 2021-07-04
  • 2021-04-17
  • 2021-12-19
相关资源
相似解决方案