C语言 sizeof

C语言中的sizeof用于获取数据类型或变量所占内存大小,尤其在处理字符串和创建结构体时至关重要。sizeof运算符在编译时计算,考虑到了字节对齐的影响,可能导致实际大小超过预期。例如,一个包含char和int的结构体,在某些编译器下可能因为字节对齐而占用8个字节,而非简单的5个字节。了解sizeof的工作原理和字节对齐的概念,对于理解和优化C语言程序至关重要。
摘要由CSDN通过智能技术生成

sizeof一般用于获取字符串的长度,是处理字符串的重要工具。

同时,sizeof在数据结构这门课中是创建结点必要的命令。

例:*head=(node*)malloc(sizeof(node)); [注]node为结构体

sizeof(node)表示获取node类型的长度,malloc(sizeof(node))表示在内存中申请一个node长度的空间(即一个空结点)。

sizeof 有三种语法形式

sizeof( type_name ); // sizeof( 类型 );

sizeof ( object ); // sizeof( 对象 );

sizeof object; // sizeof 对象;

sizeof是运算符,可用于任何变量名、类型名或常量值,当用于变量名(不是数组名)或常量时,它不需要用圆括号。

它在编译时起作用,而不是运行时。

这是初学者问得最多的一个问题,所以这里有必要多费点笔墨。让我们先看一个结构体:

struct S1
{
    char c;
    int i;
};

问sizeof(s1)等于多少,聪明的你开始思考了,char占1个字节,int占4个字节,那么加起来就应该是5。是这样吗你在你机器上试过了吗也许你是对的,但很可能你是错的!VC6中按默认设置得到的结果为8。

Why为什么受伤的总是我

请不要沮丧,我们来好好琢磨一下sizeof的定义——sizeof的结果等于对象或者类型所占的内存字节数,好吧,那就让我们来看看S1的内存分配情况:

S1 s1 = { 'a', 0xFFFFFFFF };

定义上面的变量后,加上断点,运行程序,观察s1所在的内存,你发现了什么

以我的VC6.0为例,s1的地址为0x0012FF78,其数据内容如下:

0012FF78: 61 CC CC CC FF FF FF FF

发现了什么怎么中间夹杂了3个字节的CC看看MSDN上的说明:

When applied to a structure type or variable, siz

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值