目录
1. 数据类型介绍
在C语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式
1.1 整型
类型 | 存储大小 | 值范围 |
---|---|---|
int | 4 字节 | -2的31次方~2的31次方-1 |
unsigned int | 4 字节 | 0 ~ 2的32次方-1 |
short | 2 字节 | -32,768 ~ 32,767 |
unsigned short | 2 字节 | 0 ~ 65,535 |
long | 4 字节 | -2的31次方~2的31次方-1 |
unsigned long | 4 字节 | 0 ~ 2的32次方-1 |
1.2 浮点型
类型 | 存储大小 | 值范围 | 精度 |
---|---|---|---|
float | 4 字节 | 1.2E-38 ~ 3.4E+38 | 6 位有效位 |
double | 8 字节 | 2.3E-308 ~ 1.7E+308 | 15 位有效位 |
long double | 16 字节 | 3.4E-4932 ~ 1.1E+4932 | 19 位有效位 |
1.3 字符型
类型 | 存储大小 | 值范围 |
---|---|---|
char | 1 字节 | -128 ~ 127 或 0 ~ 255 |
unsigned char | 1 字节 | 0 ~ 255 |
signed char | 1 字节 | -128 ~ 127 |
1.4 sizeof 操作符
sizeof是一个关键字,也是操作符,是专门用来计算数据在内存中所占用的存储空间,以字节为单位来计数。
sizeof的使用形式,如下:
sizeof(类型)
使用如下代码测试sizeof,看看在你的配置下这些数据类型的长度是多大呢?
#include <stdio.h>
int main()
{
printf("%zd\n", sizeof(char));
printf("%zd\n", sizeof(_Bool));
printf("%zd\n", sizeof(short));
printf("%zd\n", sizeof(int));
printf("%zd\n", sizeof(long));
printf("%zd\n", sizeof(long long));
printf("%zd\n", sizeof(float));
printf("%zd\n", sizeof(double));
printf("%zd\n", sizeof(long double));
return 0;
}
2. signed和unsigned
C语言使用signed和unsigned关键字修饰字符型和整型类型。
- signed关键字,表示一个类型带有正负号,包含负值
- unsigned关键字,表示该类型不带有正负号,只能表示零和正整数。
整数变量声明为unsigned的好处是,同样长度的内存能够表示的最大整数值,增大了一倍。
比如,16位的signed short的取值范围是:-32768~32767,最大时32767;而unsigned short的取值范围是:0~65535,最大值增大到了65535。
- 特殊的 int 等同于 signed int
3. 变量
3.1 变量的创建
上面讲的类型就是用来创建变量的。通俗的理解为经常变化的量为变量,不变的值称为常量。
- 变量是程序可操作的存储区的名称。C中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。
- 变量的名称可以由字母、数字和下划线组成。它必须以字母或下划线开头,大写字母和小写字母不同。
变量创建的语法形式,如下:
type variable_list
type 表示变量的数据类型,可以是整型、浮点型、字符型、指针等,也可以是用户自定义的对象。
variable_list 可以由一个或多个变量的名称组成,多个变量之间用逗号,分隔,变量由字母、数字和下划线组成,且以字母或下划线开头。
int age; //整型变量
char ch; //字符变量
float pi; //浮点型变量
int i, j, k; //定义了变量i, j, k
变量在创建时就给一个初始值,就叫做变量的初始化:
在 C 语言中,变量的初始化是在定义变量的同时为其赋予一个初始值。变量的初始化可以在定义时进行,也可以在后续的代码中进行。
int age = 18; //整型变量age 初始化为18
char ch = 'w'; //字符型变量ch 初始化为 'w'
float pi = 3.14; //浮点型变量pi 初始化为3.14
int i = 3, j = 4, k = 5; //定义并初始化了变量i, j, k
3.2 变量的分类
- 全局变量:在大括号外部定义的变量就是全局变量
全局变量的适用范围更广,整个工程中想要使用,都有办法使用。
- 局部变量:在大括号内部定义的变量就是局部变量
局部变量的适用范围比较局限,只能在自己所在的局部范围内使用。
当局部变量和全局变量同名时,局部变量将优先使用
#include <stdio.h>
int global = 2023;//全局变量
int main()
{
int local = 2018;//局部变量
printf("%d\n", local);
printf("%d\n", global);
return 0;
}
全局变量和局部变量在内存中存储在哪里?
在学习C/C++语言时,我们会关注内存中的三个区域:栈区、堆区、静态区。
- 局部变量是放在内存的栈区,只有在所在函数被调用时才动态地为变量分配存储单元;
- 全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。在程序执行过程中它们占据固定的存储单元,而不动态地进行分配和释放;
- 堆区用于动态内存管理;
内存区域的划分没那么简单,更详细的知识可以在操作系统相关知识中了解