【C语言】:sizeof操作符的使用和各种常见数据类型的大小

简介: 【C语言】:sizeof操作符的使用和各种常见数据类型的大小

sizeof操作符的使用和各种常见数据类型的大小


1. sizeof操作符

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

sizeof操作符的操作数可以是类型,也可以是变量或是表达式。

1.sizeof(类型)

2.sizeof 表达式

  1. 数据类型长度 sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的。
  2. sizeof 中表达式不计算,sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出大小。

例如:

#include <stdio.h>
int main()
{
  int a = 10;
  short s = 4;
  printf("%zd\n", sizeof(s = a + 5));
  printf("%d\n", s);
  return 0;
}

运行结果为:

如图所示,虽然a是int型,5也是整型,但是s是short类型,首先在sizeof中的表达式并没有真实的运算,s的值仍是4,其次是整个表达式仍是short类型,大小为两个字节。

3.sizeof 的计算结果是size_t类型(无符号整数)

sizeof 运算符的返回值,C语言只规定是无符号整数,并没有规定具体的类型,而是留给系统自己去决定,sizeof 到底返回什么类型。

有人可能发现了在上面的代码中,printf()的占位符是%zd,如果我使用%d,则会报警告:

点开第二条,会出现如下提示(本文使用的编译器是VS2022):

这是为什么呢?原因是在不同的系统中,返回值的类型有可能是unsigned int,也有可能是unsigned long,甚至是unsigned long long,对应的printf()占位符分别是%u 、%lu和 %llu,这样不利于程序的可移植性。

C语言提供了一个解决方法,创造了一个类型别名size_t,用来统一表示sizeof的返回值类型,对应 系统的 sizeof的返回值类型,可能是unsigned int,也可能是unsigned long long。

2. 常见数据类型的大小

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

运行结果为:


目录
相关文章
|
3月前
|
存储 安全 C语言
C语言中的数据类型
C语言中的数据类型
|
3月前
|
存储 C语言 索引
【C语言篇】操作符详解(下篇)
如果某个操作数的类型在上⾯这个列表中排名靠后,那么⾸先要转换为另外⼀个操作数的类型后执⾏运算。
74 0
|
3月前
|
程序员 编译器 C语言
【C语言篇】操作符详解(上篇)
这是合法表达式,不会报错,但是通常达不到想要的结果, 即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式。
257 0
|
28天前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
35 10
|
29天前
|
存储 C语言
【c语言】数据类型和变量
本文介绍了C语言中的数据类型和变量。数据类型分为内置类型和自定义类型,内置类型包括字符型、整型、浮点型等,每种类型有不同的内存大小和取值范围。变量分为全局变量和局部变量,它们在内存中的存储位置也有所不同,分别位于静态区和栈区。通过示例代码和图解,详细阐述了这些概念及其应用。
37 1
|
1月前
|
C语言
3.4 C语言基本数据类型2
在C语言中,声明一个整型(int)变量时,需先写入&#39;int&#39;关键字,后跟变量名并以分号结尾。若同时声明多个变量,可在&#39;int&#39;后用逗号分隔列出所有变量名。例如,`int erns;` 或 `int hogs, cows, goats;` 都是合法声明。变量声明后需通过赋值语句如 `cows = 112;` 或使用函数如 `scanf()` 来初始化其值。
44 10
|
1月前
|
存储 程序员 C语言
3.1 C语言基本数据类型
在C语言中,整数类型如`int`类型是很有用的,它属于有符号整型,意味着该类型的值必须是整数,并且可以是正整数、负整数或者零。`int`类型的数值范围依据计算机系统有所不同,通常取决于系统的位宽。例如,在早期16位的IBM PC兼容机上,`int`类型使用16位存储,取值范围为-32768至32767;而在当前32位系统中,使用32位存储,拥有更宽泛的取值范围。随着64位处理器的普及,`int`类型能够存储的整数范围将进一步扩大。根据ISO C标准,`int`类型的最小取值范围被规定为-32768到32767。系统通常会利用一个特殊的位来表示整数的正负。
34 10
|
1月前
|
C语言
3.1C语言基本数据类型
在C语言中,初始化变量是指为变量设定初始值,通常在声明时直接完成,例如 `int cows=32;`。应注意避免在同一语句中混合初始化与未初始化的变量,如 `int dogs, cats=94;` 这样的写法容易引起误解。此外,整型常量如21、32等在C语言中被视为int类型,但非常大的整数则不然,且带有小数点或指数的数值不属于整型常量。
27 9
|
1月前
|
存储 编译器 C语言
【C语言】简单介绍进制和操作符
【C语言】简单介绍进制和操作符
160 1
|
1月前
|
存储 C语言
初识C语言:常量与变量中寻找数据类型
初识C语言:常量与变量中寻找数据类型