关于sizeof的用法总结。

本文详细介绍了C/C++中sizeof()运算符的功能及其使用方法,包括与strlen()的区别、对指针和静态数组的操作,以及在64位系统下对结构体进行sizeof操作时的特殊考量。

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

sizeof()功能:计算数据空间的字节数
1.与strlen()比较
      strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。
      而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。
2.指针与静态数组的sizeof操作

      指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。在64位系统下,指针变量的sizeof操作结果为8.

下面介绍一个64位系统下的关于sizeof的选择题。

struct T {
    char a;
    int *d;
    int b;
    int c:16;
    double e;
};
T *p;
在64位系统以及64位编译器下,,以下描述正确的是

sizeof(p) == 24  Bsizeof(*p) == 24  C sizeof(p->a) == 1  D  sizeof(p->e) == 4

解析:

A sizeof(p)=8字节,因为p为指针。

C sizeof(p->a)=1字节,因为char在32位或64位系统中都是1个字节

Dsizeof(p->e)=8字节,因为double 是8个字节

B涉及到结构体的对齐问题使sizeof变得负责,思路:先考虑结构体的对界(对齐的上界)最大是double 8字节,然后按照结构体的字段顺序开始:

a(char) 1字节,补齐7字节

d(指针) 8字节,

b(int)4字节,c(位域2字节),补齐2字节

e(double)8字节

所以,一共4*8字节=32字节,答案只有C正确。

解释:intc:16;位域是指信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。

详细介绍参考网页http://www.cnblogs.com/chengxin1982/archive/2009/01/13/1374575.html

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值