sizeof 操作符(c++primer)

本文详细解释了sizeof操作符在C++中的用途,包括如何计算不同类型的长度,如数组、指针和引用。通过实例演示,读者能够掌握如何在实际编程中运用sizeof操作符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sizeof 操作符的作用是返回一个对象或类型名的长度,返回值的类型为size_t第 3.5.2 节),长度的单位是字节(第 2.1 节)。size_t 表达式的结果是编译时常量,该操作符有以下三种语法形式:

     sizeof (type name);
     sizeof (expr);
     sizeof expr;

sizeof 应用在表达式 expr 上,将获得该表达式的结果的类型长度:

     Sales_item item, *p;
     // three ways to obtain size required to hold an object of type Sales_item
     sizeof(Sales_item); // size required to hold an object of type Sales_item
     sizeof item; // size of item's type, e.g., sizeof(Sales_item)
     sizeof *p;   // size of type to which p points, e.g., sizeof(Sales_item)

sizeof 用于 expr 时,并没有计算表达式 expr 的值。特别是在 sizeof *p 中,指针 p 可以持有一个无效地址,因为不需要对 p 做解引用操作。

使用 sizeof 的结果部分地依赖所涉及的类型:

  • char 类型或值为 char 类型的表达式做 sizeof 操作保证得 1。

  • 对引用类型做 sizeof 操作将返回存放此引用类型对象所需的内在空间大小。

  • 对指针做 sizeof 操作将返回存放指针所需的内在大小;注意,如果要获取该指针所指向对象的大小,则必须对指针进行引用。

  • 对数组做 sizeof 操作等效于将对其元素类型做 sizeof 操作的结果乘上数组元素的个数。

因为 sizeof 返回整个数组在内存中的存储长度,所以用 sizeof 数组的结果除以 sizeof 其元素类型的结果,即可求出数组元素的个数:

     // sizeof(ia)/sizeof(*ia) returns the number of elements in ia
     int sz = sizeof(ia)/sizeof(*ia);

例子:
int x[10]; int *p = x;
cout << sizeof(x)/sizeof(*x) << endl;
cout << sizeof(p)/sizeof(*p) << endl;

【解答】
在表达式sizeof(x)中,x 是数组名,该表达式的结果为数组x 所占据的存储空间的字节数,为10 个int 型元素所占据的字节数。
表达式sizeof(*x)的结果是指针常量x 所指向的对象(数组中第一个int 型元素)所占据的存储空间的字节数。
表达式sizeof(p)的结果是指针变量p 所占据的存储空间的字节数。表达式sizeof(*p)的结果是指针变量p 所指向的对象(一个int 型数据)所占据的存储空间的字节数。各种数据类型在不同的系统中所占据的字节数不一定相同,因此在不同的系统中运行上述程序段得到的结果不一定相同。在Microsoft Visual C++ .NET 2003系统中,一个int 型数据占据4 个字节,一个指针型数据也占据4 个字节,因此运行上述程序得到的输出结果为:
10
1

注意:其中最重要的一点就是sizeof(p)的结果是指针变量p 所占据的存储空间的字节数,而不是数组的大小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值