美文网首页
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

参考

相关文章

  • sizeof

    sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式...

  • C语言中的sizeof 操作符

    简介: 今天在读《c专家编程》的时候看到第38页里面说到“当sizeof的操作数是类型名时,两边必须加上括号(这常...

  • sizoef

    一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。 它并不是函数。 ...

  • 【持续更新】C语言 第二天学习笔记(第四章)

    九、【了解】sizeof的介绍和使用 1、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他...

  • c语言中数组指针

    c语言中没有专门计算数组长度的函数,需使用sizeof(arr)/sizeof(int)计算,其中sizeof(a...

  • sizeof 和 strlen

    sizeof 定义 sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者...

  • C语言中sizeof()详解

    只要参加软件研发的笔试(C/C++)几乎都会涉及到sizeof()的用法,我昨天也遇到了,有的也会,但是真正siz...

  • C语言中对数组和指针sizeof求值

    C语言中对数组名sizeof(数组名)得到的是 数组的大小 (单位是字节);对 指针sizeof(指针)得到的是 ...

  • C语言字符串处理库函数大全

    C语言中最常用标准库函数C++ sizeof的使用总结C++ Builder cstdlib 标准库函数相关颜色的...

  • C符号的重载

    C语言中有误导性质或是不适当的特性与C语言的简洁有关(部分与符号的过度复用有关),有些则与操作符的优先级有关。C语...

网友评论

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

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