zoukankan      html  css  js  c++  java
  • 一个微妙的错误

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

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

  • 相关阅读:
    maven安装
    删掉centos原有的openjdk并安装sun jdk
    搭建私有仓库Harbor
    什么是Docker
    总结docker常用命令
    MySQL如何修改密码
    VMware vSphere
    安装Esxi 6.5
    Linux安装python3.6
    提高Linux运维效率的30个命令行常用快捷键
  • 原文地址:https://www.cnblogs.com/xubenben/p/2980011.html
Copyright © 2011-2022 走看看