365bet提款规则

sizeof运算符介绍以及常见的坑

发布时间 2025-07-06 13:20:54 作者 admin 阅读 3296

目录一、基本概念二、注意事项1、sizeof(结构体)2、不要对void使用sizeof3、不要在子函数中对字符指针用sizeof4、不要在子函数中对结构体指针用sizeof三、版权声明

一、基本概念

sizeof是C语言的关键字,它用来计算变量(或数据类型)在当前系统中占用内存的字节数。

sizeof不是函数,产生这样的疑问是因为sizeof的书写确实有点像函数,sizeof有两种写法:

用于数据类型

sizeof(数据类型);

数据类型必须用括号括住。

printf("字符型变量占用的内存是=%d\n",sizeof(char)); // 输出:字符型变量占用的内存是=1

printf("整型变量占用的内存是=%d\n",sizeof(int)); // 输出:整型变量占用的内存是=4

用于变量

sizeof(变量名);

sizeof 变量名;

变量名可以不用括号括住,带括号的用法更普遍,大多数程序员采用这种形式。

int ii;

printf("ii占用的内存是=%d\n",sizeof(ii)); // 输出:ii占用的内存是=4

printf("ii占用的内存是=%d\n",sizeof ii); // 输出:ii占用的内存是=4

二、注意事项

1、sizeof(结构体)

理论上讲结构体的各个成员在内存中是连续存放的,和数组非常类似,但是,结构体占用内存的总大小不一定等于全部成员变量占用内存大小之和。在编译器的具体实现中,为了提高内存寻址的效率,各个成员之间可能会存在缝隙。用sizeof可以得到结构体占用内容在总大小,sizeof(结构体名)或sizeof(结构体变量名)都可以。

示例(book90.c)

/*

* 程序名:book90.c,此程序用于演示C语言的结构体占用内存的情况

* 作者:C语言技术网(www.freecplus.net) 日期:20190525

*/

#include

// #pragma pack(1) # 告诉编器内存按1字节对齐。

struct st_girl

{

char name[50]; // 姓名

int age; // 年龄

int height; // 身高,单位:厘米cm

char sc[30]; // 身材,火辣;普通;飞机场。

char yz[30]; // 颜值,漂亮;一般;歪瓜裂枣。

};

int main()

{

struct st_girl queen;

printf("sizeof(struct st_girl) %d\n",sizeof(struct st_girl));

printf("sizeof(queen) %d\n",sizeof(queen));

}

运行效果

从上面的示例可以看出,struct st_girl全部成员变量占用的内存是50+4+4+30+30=118,但是结构体占用的内存是120。

注意,C语言提供了结构体成员内存对齐的方法,可以使结构体成员变量之间的内存没有空隙,启用#pragma pack(1)代码即可。

2、不要对void使用sizeof

printf("sizeof(void)=%d\n",sizeof(void)); // 输出sizeof(void)=1

以上代码在有些编译器中可能无法通过。

void是无值型或空类型,不知道存储空间大小的类型,编译器也不能确定它的大小。void不能声明变量,以下代码编译无法通过:

void vv;

但是以下代码是正确的:

void *pv;

printf("sizeof(void*)=%d\n",sizeof(pv)); // 输出sizeof(void)=8

pv是一个void指针,在64位操作系统中,指针变量占用的内存的大小都是8,下同。

3、不要在子函数中对字符指针用sizeof

如果把一个字符串(如char strname[21])的地址传给子函数,子函数用一个字符指针(如char *pstr)来存放传入的字符串的地址,如果在子函数中用sizeof(pstr),得到的不是字符串占用内存的字节数,而是字符指针变量占用内存的字节数(8字节)。

所以,不能在子函数中对传入的字符串进行初始化,除非字符串的长度也作为参数传入到了子函数中。

4、不要在子函数中对结构体指针用sizeof

如果把一个结构体(如struct st_girl stgirl)的地址传给子函数,子函数用一个结构体指针(如struct st_girl *pgril)来存放传入的结构体的地址,如果在子函数中用sizeof(pgirl),得到的不是结构体占用内存的字节数,而是结构体指针变量占用内存的字节数(8字节)。正确的用法是用sizeof(struct st_girl)。

三、版权声明

C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。

来源:C语言技术网(www.freecplus.net)

作者:码农有道

如果这篇文章对您有帮助,请点赞支持,或在您的博客中转发我的文章,谢谢!!!

相关推荐

会议怎么拍宣传片

首页 > 行业新闻 > 会议怎么拍宣传片 会议怎么拍宣传片 视频工厂 所属分类:行业新闻 发布时间:2023-09-09 17:09:49 阅读量:1048 本文将从四个方

07-01 分类 beat365手机版客户端ios

uplay打折时间2024,了解规律享受最低折扣

uplay打折时间一般都会在节假日出现,一般两三个月会推出一次,由于活动频繁,给大家的优惠力度也有所不同,从8折到2、3折都有,而且在此

07-02 分类 365报价官网

小米的产品质量到底怎么样

2021年8月装修完,3年9个月,总结已经出了的问题 1.手机:9.10.13都买了,没有主动出现过需要修的问题,9和10都摔碎过多次屏幕,13至今坚挺无维

07-05 分类 365bet提款规则

微信公众号推广的40个有效果的方法

阿酷TONY整理自网络 2020-8-28 时下,微信公众平台已成为热门的营销推广平台,大家都对微信非常重视,有的礼品企业甚至推出N个公共号,抽调专

06-29 分类 365bet提款规则

如果 Siri 在你的 iPhone 上无法正常使用

如果 Siri 在你的 iPhone 上无法正常使用 检查 iPhone 上的一些设置,确保已将 Siri 设置为聆听你的声音并回应你的请求。 打开“Siri”或“嘿 Siri”

06-27 分类 beat365手机版客户端ios