美文网首页
C语言中的sizeof 操作符

C语言中的sizeof 操作符

作者: 1037号森林里一段干木头 | 来源:发表于2021-10-25 15:03 被阅读0次

    简介:

    今天在读《c专家编程》的时候看到第38页里面说到“当sizeof的操作数是类型名时,两边必须加上括号(这常使人们误以为sizeof是个函数),但操作数如果是变量则不必加括号”。巧了,我之前一直以为sizeof是函数......,这里查查手册记录一下。

    1. sizeof 运算符

    sizeof 返回一个表达式或者一个类型名所占的字节数,使用语法有两种:
    (1) sizeof( type ); //返回type类型所占的字节数
    (2) sizeof expression; //返回expression结果类型的大小(并不计算表达式实际的值)
    注:根据计算架构不同一个字节的比特数可能不一样,但是按照标准下面的表达式都应该是1byte

    • sizeof(char)
    • sizeof(signed char)
    • sizeof(unsigned char)

    2. 示例

    struct myData {
        int a;
        char b;
    };
    
    void test_c()
    {
        //计算数组的长度,
        //一般情况下把数组名视为数组第一个元素的地址
        //例外情况是使用 sizeof 操作符作用于数组名时,返回整个数组所占字节数;
        int a[10] = { 0 };
        int lena = sizeof a / sizeof a[0];
        std::cout << "lena = " << lena << "\n";
    
        myData data,*p;
        sizeof(myData);         //存储myData类型的对象所占的字节数
        sizeof data;            //data变量的类型占据的空间的字节数,相当于sizeof(myData)
        sizeof p;               //指针p所占空间的字节数
        sizeof *p;              //p指向的类型占据的空间的字节数,相当于sizeof(myData)
        sizeof data.a;          //结构体成员对应类型的大小
        sizeof myData::a;       //另一种获取结构体成员大小的方法
    
        std::cout <<
            "sizeof(myData) = " << sizeof(myData) << "\n" <<
            "sizeof data = " << sizeof data << "\n" <<
            "sizeof p = " << sizeof p << "\n" <<
            "sizeof *p = " << sizeof *p << "\n" <<
            "sizeof data.a = " << sizeof data.a << "\n" <<
            "sizeof myData::a = " << sizeof myData::a << "\n";
    
        char *c;
        std::cout <<
            "sizeof c = " << sizeof c << "\n" <<
            "sizeof *c = " << sizeof *c << "\n";
     }
    

    输出:

    lena = 10
    sizeof(myData) = 8
    sizeof data = 8
    sizeof p = 8
    sizeof *p = 8
    sizeof data.a = 4
    sizeof myData::a = 4
    sizeof c = 8
    sizeof *c = 1
    
    • 注1:sizeof * p;
      sizeof 运算符满足右结合律,而且优先级和*一样,所以sizeof *p等价于sizeof(*p),这里sizeof并不会实际去求*p的值,所以即使p是一个空指针也不会有任何问题。
    • 注2:sizeof a;
      在C++中一般情况下把数组名视为数组第一个元素的地址,一种例外情况是使用 sizeof 操作符作用于数组名时,返回整个数组所占字节数。sizeof 作用于指针时,得到的是指针的长度,即使指针指向的是一个数组。----<<C++ Primer Plus (中文5th)>>P100,P101

    参考

    相关文章

      网友评论

          本文标题:C语言中的sizeof 操作符

          本文链接:https://www.haomeiwen.com/subject/topjaltx.html