sizeof()操作符性质和注意事项

文章探讨了C语言中sizeof运算符在不同情境下的行为,包括对基本数据类型和运算符处理的差异,以及在VisualStudio和Linux平台上的不同编译结果。

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

        首先来看一串代码

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

        执行后结果为2   5,s占2个字节,s的值为5,sizeof括号中表达式未参与运算,这是因为sizeof在编译时已经执行,而运算在运行编译后的exe可执行程序时执行。

test.c                      编译                             test.exe

源文件                    执行sizeof                    可执行程序

         再看一串代码

int main()
{
	char c = 1;
	//%u是输出无符号整型unsigned int
	printf("%u\n", sizeof(c));//1
	printf("%u\n", sizeof(+c));//4
	printf("%u\n", sizeof(-c));//4
	printf("%u\n", sizeof(!c));
	return 0;
}

        在VS平台中执行结果为1    4    4    1,而在Linux平台使用gcc编译测试结果是1    4    4   4 

        其中,1是指char数据类型占1个字节,下面两个4是在进行编译时,由于运算符的存在,发生了整型提升,char字符类型提升为int整型,变成了4个字节,而最后一个sizeof(!c),按照C语言国际标准执行应该是4,而在VS编译器中执行结果为1。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值