C语言中的sizeof 操作符

2021-10-25  本文已影响0人  1037号森林里一段干木头

简介:

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

1. sizeof 运算符

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

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

参考

上一篇下一篇

猜你喜欢

热点阅读