c语言sizeof char,sizeof 你真的弄明白了吗?来看看这个例子

本文详细介绍了C语言中的sizeof操作符,包括其用法、返回值类型以及在不同情况下的表现。通过实例代码展示了sizeof在处理各种数据类型、字符常量、指针和字符串时的计算规则,帮助读者深入理解sizeof的运用。同时,文章还探讨了类型转换和指针运算的相关知识点。

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

原标题:sizeof 你真的弄明白了吗?来看看这个例子

sizeof基础

在C语言中,sizeof是一个操作符(operator),而不是函数!其用于判断数据类型或者表达式长度(所占的内存字节数)。其有两种表达形式:

(1)sizeof(类型说明符)

(2)sizeof 表达式

我们通常使用第(1)种形式。

其返回值类型为size_t,在头文件stddef.h中定义。这是一个依赖于编译系统的值,一般定义为:

typedef unsigned int size_t;

首先确定我们当前编译环境中C语言各个基本数据类型在内存中所占字节数,我这里是32bit编译环境:

#include

intmain(void)

{

printf( "sizeof(char) = %un", sizeof( char));

printf( "sizeof(short) = %un", sizeof( short));

printf( "sizeof(int) = %un", sizeof( int));

printf( "sizeof(long) = %un", sizeof( long));

printf( "sizeof(float) = %un", sizeof( float));

printf( "sizeof(double)= %un", sizeof( double));

return0;

}

我们这里的输出结果为:

d8dff64be4077e4f4add01d7f062e174.png

sizeof典型问题

sizeof看起来似乎很简单,那来看看下面这段代码,你能做对几个

ddf04f811d6f90297b4fd836a8851693.png

#include

intmain(void)

{

char*s = "hello";

printf( "sizeof(char) = %un", sizeof( char));

printf( "sizeof(char*)= %un", sizeof( char*));

printf( "sizeof('a') = %un", sizeof( 'a'));

printf( "sizeof(*s+0) = %un", sizeof(*s+ 0));

printf( "sizeof(*s) = %un", sizeof(*s));

printf( "sizeof(s) = %un", sizeof(s));

return0;

}

实际输出结果为:

65275d1eea44e7a5dd03b4da20475463.png

你懵了吗?没懵的话算我输

9b52f2c40004e839bc25d5b1231a55f9.png

fcc30bc299b2bcdadf94bf21d902ee4d.gif

简要分析:

(1)sizeof(char) 的值为1。因为char类型数据在内存中占1字节。

(2)sizeof(char*)的值为4。因为char*代表一个指针,在32bit环境中为4字节,也即unsigned int的字节长度。

(3)sizeof('a')的值为4。因为此处‘a’是独立存在的一个字符(没有赋值给其它变量),实际上就是一个整型数,占4个字节,即此处‘a’对应的ascii码的十进制为整数97。(貌似解释得有些牵强,但事实就是这样

c6cc6648d53f14e1db15f92682c03db9.png

)但是需要注意的是,若有如下定义:

char ch = 'a';

则此处ch的字节数sizeof(ch)的值为1,而不是4。

(4)sizeof(*s+0)的值为4,因为'h'+0 转化为int,占4字节。此处涉及到类型转换的问题。即不同类型的数据进行运算时,会首先转换成相同数据类型。转换规则为(图片来源于网络):

aa5fbe3e49abc6eff7a62ec25ee0db42.png

(5)sizeof(*s)的值为1,因为此处*s为字符串s的第1个字符‘h’(注意与第三点区分开来,这里是有用char来修饰的),所以所占字节长度为1。

(6)sizeof(s)的值为4,同(2),此处s是一个指针,在32bit环境中为4字节,也即unsigned int的字节长度。

End:以上就是本次的分享,如有错误,欢迎指出!欢迎转发、下载、收藏、点赞。

欢迎大家留言区讨论哦!

Wink !

请大家来给这几行C语言代码找找茬

一个简单但能考察C语言基础的题目,试试?

八大排序算法 ,C语言详细版讲解,硬核推荐!!!

堆和栈的区别(非常详细,干货收藏!)

C语言中“悬空指针”和“野指针”究竟是什么意思?

这绝对是C语言的一个经典例题了!

这两个C运算符你可能没用过,但却很有用~返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值