1、数据类型介绍
C语言提供了丰富的数据类型来描述生活中的各种数据。
比如:使用整型类型来描述整数,使用字符类型来描述字符,使用浮点型类型来描述小数。
所谓的"类型"就是相似的数据所拥有的共同特征
例如:5,8,10这些数都同属于同一种类型-整型类型,而2.2,5.3都同属于同一种类型-浮点型类型
C语言中的数据类型包括:内置类型和自定义类型。
内置类型包括:字符型、整型、浮点型、布尔类型
自定义类型包括:数组、结构体-struct、枚举-enum、联合体-union
如下是各个类型中的细分:
1.1字符型
char
signed\](可以省略不写) char//有符号的char unsigned char//无符号的char
1.2整型
//短整型
short [int]
signed \] short \[int\];//有符号的短整型 unsigned short \[int\]//无符号的短整型 //整型 int \[signed\] int //有符号的整型 unsigned int//无符号的短整型 //长整型 long \[int
signed\] long \[int\] //有符号的长整型 unsigned long \[int\]//无符号的长整型 //更长的整型 long long \[int
signed\] long long \[int\]//有符号 unsigned long long \[int\]//无符号
short, int , long ,long long 这些类型虽然表示的都是整型数据,但是该类型定义的变量其所占空间大小是不一样的。
1.3浮点型
float
double
long double
1.4布尔类型
C语言中原来并没有为布尔类型单独设置为一个类型,而是使用整数0表示假,非零值表示真。
在C99中才引入了布尔类型,布尔类型是专门用来表示真假的。
布尔类型用_Bool表示。
在C语言代码中如果要使用布尔类型,要包含头文件:<stdbool.h>
布尔类型变量的取值是:true或者false
上述信息是stdbool.h文件中的信息:
在该文件中使用宏#define 将bool定位为了_Bool,将false定义为了0,将true定义为了1
由于使用宏#define 将bool定位为了_Bool
那么以后在使用布尔类型的时候可以有两种写法:
第一种写法:_Bool flag=true;第二种写法:bool flag =true;
而由于宏#define将false定义为了0,将true定义为了1
那么上述的两种写法又可以表示为:_Bool flag=1;或者 bool flag=1


建议:上述两张照片中,直接将_Bool类型的flag值赋值为0或1没有什么问题,只是可读性不好,还是建议写true或者false
只要使用布尔类型的数据类型都要包含头文件:#include<stdbool.h>
1.5各种数据类型的长度
上述中,介绍了很多种数据类型,比如:整型,字符型,而整型中又有短整型,长整型。有那么多种数据类型,这些数据类型有什么区别呢?其实每一种数据类型都有自己的长度,使用不同的数据类型,能够创建出长度大小不同的变量,变量长度的不同,存储的数据范围就有所差异。
(上述所说的数据类型的长度意思就是该类型的数据在内存中存储时所占内存空间大小)
1.5.1sizeof操作符
sizeof是一个关键字,也是操作符,是专门用来计算sizof的操作数的类型长度的,sizeof计算数据类型的结果单位是字节。
sizeof操作符的操作数可以是类型,也可以是变量或者表达式。
比如:
sizeof(类型)
sizeof (表达式)
sizeof的操作数如果不是数据类型(比如: sizeof ( 5)),是表达式的时候,是可以省略掉后边的括号的(比如:sizeof 5);
代码:

sizeof后边的表达式是不真实参与计算的,根据表达式的类型来得出大小。
sizeof的计算结果是size_t类型的
扩展:
sizeof运算符的返回值,C语言只规定是无符号整数,并没有规定具体的类型,而是留给系统自己去决定。不同的系统中,返回值的类型有可能是unsigned int ,也有可能是unsigned long,甚至是unsigned long long ,对应的printf()占位符分别是:%u,%lu,%llu.但这样不利于程序的可移植性。
C语言提供了一个解决办法,创造了一个类型别名size_t,用来统一表示sizeof的返回值类型。对应当前系统的sizeof的返回值类型,可能是unsigned int,也可能是unsigned long long .
在Visual Studio 2022中用%zd来打印sizeof
1.5.2数据类型长度
cpp
//使用sizeof计算各个类型所占空间字节大小
#include<stdio.h>
int main()
{
printf("%zd\n", sizeof(char));
printf("%zd\n", sizeof(int));
printf("%zd\n", sizeof(_Bool));
printf("%zd\n", sizeof(long));
printf("%zd\n", sizeof(short));
printf("%zd\n", sizeof(long long ));
printf("%zd\n", sizeof(double));
printf("%zd\n", sizeof(float));
printf("%zd\n", sizeof(long double));
return 0;
}
结果:

2、signed 和unsigned
C语言中使用signed和unsigned关键字修饰字符型和整型类型的数据
signed关键字,用来表示一个类型带有正负号,包含负值;
unsigned关键字,用来表示该类型不带有正负号,只能表示零和正整数
对于int类型,默认是带有正负号的 ,也就是人说int等同于signed int,由于这是默认情况,关键字signed一般都省略不写,但是写了也不算错
signed:有符号的。unsigned:无符号的
%d--打印整数,打印的是有符号的整数
%u--打印无符号整数的。
打印数据的时候,一定要跟数据的格式匹配上,否则结果可能出错。
比如:
signed int a;//等同于 int a;
int类型也可以不带正负号,只表非负整数,这时就必须使用关键字unsigned声明变量
unsigned int a;
整数变量声明为 unsigned 的好处是,同样⻓度的内存能够表⽰的最⼤整数值,增⼤了⼀倍。 ⽐如,16位的 signed short int 的取值范围是:-32768~32767,最⼤是32767;⽽ unsigned short int 的取值范围是:0~65535,最⼤值增⼤到了65,535。32位的 signed int 的取值范围可以参看 limits.h 中给出的定义。
字符类型char也可以设置signed 和unsigned
signed char c;//范围为-128~127
unsigned char c;//范围为0~255
注意:C语言规定char类型默认是否带有正负号,由当前系统决定
这就是说:char不等同于signed char ,它有可能是signed char,也有可能是unsigned char.
在Viusal Studio 2022中,char就是signed char
3、数据类型的参数范围
上文列举了很多种数据类型,就整型类型而言,就有short,int,long,long long 四种,这四种类型的区别就在于所占内存空间大小不同,从而导致了各种类型所表示的整型数据的范围不同。
其实每一种数据类型都有自己的取值范围,也就是存储的数值的最大值和最小值的区间,有了丰富的数据类型,我们就可以在适当的场景下去选择合适的类型。
4、变量
4.1变量的创建
通过上述类型的描述,我们了解了C语言中的内置类型,接下来就讲解上述类型的用途。我们可以使用类型来创建变量。
创建变量的语法:
data_type name;//data_type就是上述所讲的数据类型, 而name就是变量的名字
比如:
int age;
double price;
变量在创建的时候就给⼀个初始值,就叫初始化
比如:
int age=20;//在创建变量的同时,给该变量一个初识值