【C语言】番外篇(1)——sizeof用法

本文详细解释了C语言中的sizeof操作符,包括其用于计算类型长度、解决返回值类型不一致的问题,以及它在编译时期对表达式类型处理的特点。通过示例展示了不同数据类型的sizeof结果。

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

一、sizeof操作符

        sizeof是一个关键字,也是操作符。专门用来计算sizeof的操作符数的类型长度,单位是字节。

        sizeof实际上是获取了数据在内存中所占用的存储空间,以字节为单位来计数。

        sizeof的操作符的操作数可以是 类型、变量、“ 表达式 ”

int main()
{
	int a;
	printf("类型:%zd\n", sizeof(int));
	printf("变量:%zd\n", sizeof(a));
	printf("表达式:%zd\n", sizeof(10 + 20));
	return 0;
}

二、答疑解惑

        仔细的同学会看到,在上面的代码里面会有很多奇怪的地方:

        1.为什么printf输出的时候,是%zd而不是%d?

        2.为什么表达式里面的是 10 + 20,输出不应该是30吗,为啥会是4呢?

        下面就给大家解答:

        1.为啥要用%zd输出

        首先就是C语言中并没有规定sizeof运算符的返回值的类型,不同的系统返回值的类型可能各不相同,这样是不便于我们后面进行各种移植的。

        为了解决这个问题,C语言创建了一个类型别名size_t,用来统一表示sizeof的返回值类型。

        但是问题又出来了,每个编译器的size_t的类型又各不相同,有的是unsigned int等等。

        在VS的编译环境中,就用%zd来表示size_t的类型。

        2.为什么表达式不进行计算

        sizeof在代码进行编译的时候,已经根据表达式的类型确定了,表达式的执行是在程序运行期间执行的。

        换句话说,就是sizeof就是先下手为强,在表达式运行的时候,就把类型确定了。(主要是看表达式左边的数据类型。)

int main()
{
	char s = 2;
	short a = 10;
	printf("%zd", sizeof (s = a + 5));
	return 0;
}

                

三、拓展

int main()
{
	printf("char:%zd\n", sizeof(char));
	printf("bool:%zd\n", sizeof(bool));
	printf("short:%zd\n", sizeof(short));
	printf("int:%zd\n", sizeof(int));
	printf("long:%zd\n", sizeof(long));
	printf("long long:%zd\n", sizeof(long long));
	printf("float:%zd\n", sizeof(float));
	printf("double:%zd\n", sizeof(double));
	printf("long double:%zd\n", sizeof(long double));
}

                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值