数据类型介绍

内置数据类型:整型、字符型、浮点型、布尔型

自定义类型:数组、结构体-struct、枚举-enum、联合体-union

整型

1
2
3
4
5
6
7
8
9
10
11
12
//短整型
short
unsigned short
//整型
int
unsigned int
//长整型
long
unsigned long
//C99中引入,更长的整型
long long
unsigned long long

字符型

1
2
char
unsigned char

浮点型

1
2
3
float
double
long double

布尔型

C99中引入的 布尔类型 专门表示真假的

1
2
3
4
5
6
7
#include <stdbool.h>

int main()
{
_Bool flag = true;
//_Bool flag = false;
}

各种数据类型的长度

每一种数据类型都有自己的长度,根据不同的数据类型,能够创建出不同长度的变量,变量的长度不同,存储的范围也不同。

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

八个比特位等于一个字节 8bit = 1byte

sizeof 的操作数可以是类型、变量、或者表达式。

  • sizeof 后边的表达式不进行计算,仅根据表达式的类型得出大小
  • sizeof 的计算结果是 size_t 类型的,在 printf 函数中使用 %zu 占位符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

int main()
{

printf("%zu\n", sizeof(char)); //1
printf("%zu\n", sizeof(_Bool)); //1
printf("%zu\n", sizeof(short)); //2
printf("%zu\n", sizeof(int)); //4
printf("%zu\n", sizeof(long)); //4或8 sizeof(long) >= sizeof(int)
printf("%zu\n", sizeof(long long)); //8
printf("%zu\n", sizeof(float)); //4
printf("%zu\n", sizeof(double)); //8
printf("%zu\n", sizeof(long double)); //8或16 sizeof(long double) >= sizeof(double)


return 0;
}

在VS2026 X64配置下的输出:

image-20260727161900477

signed & unsigned

C语言使用 signedunsigned 关键字修饰字符型和整型类型

字符类型存储的是ASCII码值,ASCII码是整数,所以字符类型属于整型家族

signed 关键字,表示一个类型带有正负号,包含负值;unsigned 关键字,表示该类型无正负号,只能表示零和正整数。

1
2
signed int a;  //等价于 int a;
unsigned int a;

整数变量声明为 unsigned 的好处是,同样长度的内存能够表示的最大整数值,增大近了一倍。

1
2
3
4
5
#define SHRT_MIN (-32768) //有符号16位整型的最⼩值 short
#define SHRT_MAX 32767 //有符号16位整型的最⼤值
#define USHRT_MAX 0xffff //⽆符号16位整型的最⼤值 unsigned short
#define INT_MIN (-2147483647 - 1) //有符号整型的最⼩值
#define INT_MAX 2147483647 //有符号整型的最⼤值

可以通过 limits.h 文件查看不同整型有符号和无符号的数据取值范围。

注:

1
2
3
char a
signed char a
unsigned char a

C语言规定 char 类型默认是否带有正负号,由当前系统决定。也就是说,char 不等同于 signed char ,有可能是 signed char ,也有可能是 unsigned char

这一点与 int 不同,int 就是等同于 signed int

数据类型取值范围

每一种数据类型都有自己的取值范围,也就是储存的数值的最大值和最小值的区间。

可以通过 limits.h 文件查看整型类型的取值范围

通过 float.h 文件查看浮点型类型的取值范围

为了代码的可移植性,当需要知道某种整型类型的极限值时,应当使用以下变量

1
2
3
4
5
6
7
8
9
10
SCHAR_MIN SCHAR_MAX  //signed char
SHRT_MIN SHRT_MAX //short
INT_MIN INT_MAX //int
LONG_MIN LONG_MAX //long
LLONG_MIN LLONG_MAX //long long
UCHAR_MAX //unsigned char
USHRT_MAX //unsigned short
UINT_MAX //unsigned int
ULONG_MAX //unsigned long
ULLONG_MAX //unsigned long long

变量

变量的创建语法形式:data_type name;

1
2
3
int age;
char ch;
double num1;

变量命名的一般规则:

  • 只能由字母(大小写)、数字和下划线组成
  • 不能以数字开头
  • 长度不能超过63个字符
  • 变量名中区分大小写
  • 变量名不能使用关键字

变量在创建的时候就给一个初始值,就叫做初始化

1
2
3
int age = 23;
char ch = 'w';
double num1 = 56.0;

变量的分类

  • 全局变量:在大括号外部定义的变量就是全局变量,放在了内存的静态区
  • 局部变量:在大括号内部定义的变量就是局部变量,放在了内存的栈区

局部变量只能在局部范围使用,如果局部变量和全局变量同名时优先使用局部变量

参考链接