zoukankan      html  css  js  c++  java
  • C中的sizeof要点

    对函数使用sizeof,在编译阶段会被函数返回值的类型取代。如:首先要明确sizeof不是函数,也不是一元运算符,它是个类似宏定义的特殊关键字,sizeof();括号内在编译过程中是不被编译的,而是被类型替代。

    int a=8;sizeof(a++);在编译过程中,a的值不会变,只是被替换成类型sizeof(int);结果为4.

    sizeof(a=6);呢,也是一样的转换成a的类型,但是要注意   因为a=6是不被编译的,所以执行完sizeof(a=6);a的值还是8,是不变的!

    记住一下结论:

    1.unsigned影响的只是最高位bit的意义(正负),数据长度不会被改变的。所以sizeof(unsigned   int)  ==   sizeof(int);

    2. 自定义类型的sizeof取值等同于它的类型原形。如typedef short WORD;sizeof(short) == sizeof(WORD)。

    3. 对函数使用sizeof,在编译阶段会被函数返回值的类型取代。如:

    int   f1(){return   0;};
    cout << sizeof(f1()) <<endl;   // f1()返回值为int,因此被认为是int

    4. 只要是指针,x86就是4,x64就是8。如:cout < <sizeof(string*) < <endl;   //   4

    5. 数组的大小是各维数的乘积*数组元素所属类型的大小。如:

      char   a[]   =   "abcdef ";
      int   b[20]   =   {3,   4};
      char   c[2][3]   =   { "aa ",   "bb "};
      int  d[][5][3]   =   {{1,2}};
      cout <<sizeof(a) <<endl;   //   8
      cout <<sizeof(b) <<endl;   //   20*4
      cout <<sizeof(c) <<endl;   //   6
      cout <<sizeof(d) <<endl;   //   5*3*4  省略第一维时,将后面的相乘

    6. 字符数组的sizeof和strlen的区别

        char  a[10] =   "abcde";
        cout << strlen(a) << " " << sizeof(a) << endl;  // 5 10
    
        char* b = "abcde";
        cout << strlen(b) << " " << sizeof(b) << endl;  // 5 4

    7. 数组名做函数参数时自动退化成指针

    int getSize(int a[]){
        return sizeof(a);
    }
    
    cout << getSize(a) << endl;  // 4,退化成了指针

    参考链接:

    1. 博客园_漫步云端-C++ sizeof() 和一道面试题

    2. CSDN_liming0931-C语言面试题sizeof的注意点

  • 相关阅读:
    用工具爬虎牙星秀VS用代码
    mysql简单的操作
    MySQL5.1的安装过程
    MySQL的安装
    SQL server 2008 的安装
    数据库基础知识
    HTTP协议
    TCP协议
    web系统基础
    软件测试缺陷的定义、产生原因、缺陷报告格式、缺陷报告
  • 原文地址:https://www.cnblogs.com/lfri/p/12420679.html
Copyright © 2011-2022 走看看