二.C语言数据类型和变量
1.数据类型介绍
C语言提供多种数据类型来描述生活中各种数据
整型类型描述整数,字符类型描述字符,浮点型类型来描述小数。
“类型”,即相似的数据所共有的特征,编译器只有知道数据的类型,才能知道该如何操作数据。
下面是C语言提供的各种数据类型,目前先主要探讨内置数据类型

1.1字符型
char //character
[signed] char //有符号的
unsigned char //⽆符号的
1.2整型
//短整型
short [int]
[signed] short [int]
unsigned short [int]
//整型
int
[signed] int
unsigned int
//⻓整型
long [int]
[signed] long [int]
unsigned long [int]
//更⻓的整型
//C99中引⼊
long long [int]
[signed] long long [int]
unsigned long long [int]
1.3浮点型
float
double
long double
1.4布尔类型
C语言原来并没有为布尔值单独设置一个类型,而是使用整数0表示假,非零值表示真。
在C99中也引入了布尔类型,是专门表示真假的。
_Bool
布尔类型的使用需要包含头文件
布尔类型变量的取值是:true 或者false
#define bool _Bool
#define false 0
#define true 1
例如:
#include
#include
int main()
{
bool flag = true;
if (flag)
printf("i like C
");
}
上面这段代码就是声明变量 flag 为 true 的布尔值,可以正常打印出 "i like C"
如果像下面这样,声明为 false,那 if 判断语句就不会执行 printf 这一操作
#include
#include
int main()
{
bool flag = false;
if (flag)
printf("i like C
");
}
1.5数据类型的长度
bit 比特 、 Byte 字节 、 KB 、 MB 、 GB 、 TB ……
1B = 8 bit 1KB = 1024 B 1MB = 1024 KB 1GB = 1024 MB 1TB = 1024 GB
每种数据类型都有自己的长度(字节),使用不同的数据类型,能够创建出长度不同的变量,变量长度的不同,存储的数据范围就有所差异。
1.5.1 sizeof 操作符
sizeof 是一个关键字,也是操作符,专门用来计算 sizeof 的操作符数的类型长度,单位是字节。
sizeof操作符的操作数可以是类型,也可是变量或者表达式。
sizeof( 类型 )
sizeof 表达式
sizeof的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号。
sizeof后边的表达式是不真实参与运算的,根据表达式的类型来得出大小。
sizeof的计算结果是 size_t 类型的。%zd 对应返回值 size_t 类型
#include
int main()
{
int a = 10;
printf("%zd
", sizeof(a));
printf("%zd
", sizeof a);//a是变量的名字,可以省略掉sizeof后边的()
printf("%zd
", sizeof(int));
printf("%zd
", sizeof(3 + 3.5));
return 0;
}
1.5.2数据类型长度
#include
int main()
{
printf("%zd
",sizeof(char));
printf("%zd
", sizeof(_Bool));
printf("%zd
", sizeof(short));
printf("%zd
", sizeof(int));
printf("%zd
", sizeof(long));
printf("%zd
", sizeof(long long));
printf("%zd
", sizeof(float));
printf("%zd
", sizeof(double));
printf("%zd
", sizeof(long double));
return 0;
}
输出结果(VS2022 X64配置):
1
1
2
4
4
8
4
8
8
1.5.3 sizeof 中表达式不计算
#include
int main()
{
short s = 2;
int b = 10;
printf("%d
", sizeof(s = b+1));
printf("s = %d
", s);
return 0;
}
sizeof 在代码进行编译时,就根据表达式的类型确定了,表达式要在程序运行期间才能执行,编译期间将 sizeof 已经处理掉,运行时就不会执行表达式,则上端代码的结果为
2
2
2.signed 和 unsigned
C语言使用signed和unsigned关键字修饰字符型和整型类型的。
signed关键字,表示一个类型带有正负号,包含负值;
unsigned关键字,表示该类型不带有正负号,只能表示零和正整数。
对于 int 类型,默认是带有正负号的,即 int 等同于signed int。默认情况下,关键字signed 一般都省略不写,但写了也不算错。
signed int x;
//等同于 int x;
若想要不带正负号,只表示非负整数,这时候就必须加上关键字 unsigned 来声明变量
unsigned int a;
整数变量声明为 unsigned 的好处是,同样长度的内存能够表示的最大整数值,增大了一倍。
比如,16位的 signed short int 的取值范围是:-32768~32767,最大是 32767 ;但 unsigned short int 的取值范围是:0~65535,最大值增大到了65,535。
同理,其他数据类型也可以设置 signed 和 unsigned
signed char c; // 范围为 -128 到 127
unsigned char c; // 范围为 0 到 255
3.数据类型的取值范围
每一种数据类型有自己的取值范围,也就是存储的数值的最大值和最小值的区间,有了丰富的类型,我们就可以在适当的场景下去选择适合的类型。
为了代码的可移植性,需要知道某种整数类型的极限值时,应该尽量使用这些常量:
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:unsignedint的最大值。
ULONG_MAX:unsigned long的最大值。
ULLONG_MAX:unsigned long long的最大值。
4.变量
4.1创建变量
上面我们了解了类型,而类型是干什么用的呢?类型可以用来创建变量。
什么是变量?C语言中将经常变化的值称为变量,不变的值称为常量。
变量是这样创建的:
data_type name;
| |
| |
数据类型 变量名
int age; //整型变量
char ch; //字符变量
double length; //浮点型变量
变量在创建时就给一个初始值,叫做初始化。
int age = 18;
char ch = 'z';
double weight = 60.0;
unsigned int height = 175;
(创建变量时最好就进行初始化,防止出现一些错误)
4.2变量的分类
全局变量:在大括号外部定义的变量就是全局变量
全局变量的使用范围更广泛,整个工程中想使用,都是有办法使用的。
局部变量:在大括号内部定义的变量就是局部变量
局部变量的使用范围比较局限,只能在自己所在的局部范围内使用。
#include
int global = 2026;//全局变量
int main()
{
int local = 2025;//局部变量
printf("%d
", local);
printf("%d
", global);
return 0;
}
当局部变量和全局变量同名的时候,局部变量优先使用
#include
int n = 1000;
int main()
{
int n = 10;
printf("%d
" n);//打印的结果是10
return 0;
}
全局变量未初始化默认为 0 ,局部变量未初始化就使用为随机数字
全局变量和局部变量存储位置:
内存中有三个区域:栈区、堆区、静态区
1.局部变量放在内存的栈区
2.全局变量放在内存的静态区
3.堆区是用来动态内存管理的(后期学习)

完









