关于sizeof()的了解

本文介绍了C语言中的sizeof()操作符,它用于计算内存中数据类型和表达式的存储大小,结果以字节为单位。特别强调了sizeof()对不同类型和表达式的处理方式以及可能因编译器和系统差异产生的结果差异。
摘要由CSDN通过智能技术生成

sizeof()是什么?

sizeof()并不是一个函数,而是一个操作符。它计算的就是操作数在内存中所占用的存储大小,单位为字节。这里的操作数既可以是数据类型,也可以是某个表达式。

关于sizeof()的使用

举个栗子:

这段代码使用sizeof()运算符来输出各种基本数据类型所占据的内存大小(以字节为单位)。

#include <stdio.h>

int main()
{
	printf("%zd\n",sizeof(char));//1
	printf("%zd\n", sizeof(short));//2
	printf("%zd\n", sizeof(int));//4
	printf("%zd\n", sizeof(long));//4
	printf("%zd\n", sizeof(long long));//8
	printf("%zd\n", sizeof(float));//4
	printf("%zd\n", sizeof(double));//8
	printf("%zd\n", sizeof(long double));//8

	return 0;
}

程序运行结果:

 

注意:这些数据类型的大小可能会因为编译器和系统的不同而显示的结果不同。例如,int在某些系统上可能是2字节,而在其他系统上可能是4字节或者更多,但通常是4字节。 另外,long(长整型)是大于等于int(整型)的内存大小的,所以long运行出来是4字节也没有问题的,long doubledouble的大小关系同理。

由于sizeof返回的是一个size_t类型的值,所以用%zd来打印结果。

再举个栗子:

这段代码使用sizeof()运算符展示如何返回不同表达式的大小(以字节为单位)。

#include <stdio.h>

int main()
{
	int a = 10;//定义一个整型变量a,并初始化为10

	printf("%zd\n",sizeof(a));//4
	printf("%zd\n", sizeof a);//4

	printf("%zd\n",sizeof(int));//4
	printf("%zd\n",sizeof (a + 2));//4
	printf("%zd\n", sizeof (10 + 2));//4
	printf("%zd\n", sizeof 10 + 2);//6
    printf("%zd\n",sizeof(++a));//4

	return 0;
}

解析:

  1. 使用sizeof运算符获取变量a的大小,因为a是int类型,所以输出是4字节。
  2. 另外,在C语言当中,sizeof运算符可以接受括号内的类型(如sizeof(int)),也可以接受变量名或者表达式(如sizeof  a),后者会自动解析为变量的类型大小。在使用类型作为操作数时,括号是必须要加上的,而在使用变量时,括号是可选的。因此sizeof  asizeof(a)是等价的。
  3. 直接获取int类型的大小。
  4. 由于a是int类型,a+2的结果也是int类型,所以大小是4字节。这个地方需要注意的是,如果sizeof()括号内放的是表达式,它其实是不会真实计算这个表达式的数值的,最后返回的应该是这个表达式在内存中所占的大小。
  5. 虽然(10+2)这个表达式的结果是一个整数常量,但sizeof返回的是这个整数常量在内存中的大小,因此仍然是4字节。
  6. 倒数第二行和前面的有点不同。sizeof  10返回整数常量10的大小(就是4字节),然后这个值(4)与整数2相加,得到6。因此,这行代码的输出是6,而不是整数类型的大小。
  7. ++a还是int类型,所以大小是4字节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值