每个被执行的C
程序为了管理方便,系统会为每个执行的程序分配一个虚拟内存空间,方便管理。在虚拟内存空间每个应用程序都是一样,虚拟内存布局都是一致的。通过映射的方式在物理内存上执行。
虚拟内存的分布包括:内核空间、栈、堆、数据段、代码段以及一个不可访问的空间。
![](https://img-blog.csdnimg.cn/b99f02c80a4342e8972a06089dbe08dc.png)
存储类型
1、静态类型变量:
static修饰 使用方法:static 数据类型 变量名;
static修饰局部变量,其生命周期为程序周期但作用域不变,多次使用时跳过定义静态变量语句。
static
修饰全局变量,只能是本文件使用这个变量。
2、寄存器类型变量:
register修饰 使用方法:register 数据类型 变量名;
把变量从内存调到cpu
中寄存器中存储,之后常驻在
cpu
内部,调度使用这个变量更快
;
用
register声明只是说明想存储在cpu
中,但是是否能否存储在
cpu
中,系统决定,如果不能存储,就是普通变量进行存储。
3、外部类型变量:
使用方法:extern 数据类型 变量名;//表示使用其他文件的变量
如果程序中一个文件调用另一个文件的变量(另外文件定义变量想在这个文件中使用),则需要在文件中声明是外部变量。
4、自动类型变量:
使用方式:auto 数据类型 变量名;
表示系统自动为变量分配内存空间,如果定义在函数内表示定义在栈中,如果定义变量没有添加存储类型,则默认使用auto,表示自动变量。
关键字(修饰数据类型 )
1、是否有符号
unsigned:表示无符号数据类型,数据存储没有符号位,所有位都是数据位,没有负数
signed(不写,则默认):表示有符号数据类型,最高位为符号位,数据有效位大小-1
使用 unsigned 数据类型 变量名; signed 数据类型 变量名;
2、常量
const:表示变量不可修改,变为常量。 const 数据类型 变量名;
一般用const修饰的变量,都要进行初始化,设定一个值,只允许访问,不允许修改。
使用 const 数据类型* 变量名; 或者 数据类型* const 变量名;
前者表示指针变量可以存储其他不同变量的地址,但是不能修改指向的空间的值。
后者表示指针变量不能存储其他变量的地址,但是可以修改指向的空间的值。
管理堆空间
1、申请
void * malloc(size_t size);
申请
size
大小的空间,以字节为单位,执行函数,返回申请的空间的起始地址
void * 类型指针:万能指针
表示存储地址,但是不确定存储的地址是以什么类型访问,只能用作存储地址而已,不能取值,这种指针类型可以赋值给其他任意类型的指针变量,其他任意类型的指针变量也可以赋值给这种指针类型。
指针变量 = malloc(大小)
2、释放
void free(void * ptr);
调用
free
就是释放对应的空间,根据地址,表示释放哪一段空间
构造类型
C语言中,基本数据类型,不能满足需要,语言提供提供扩展性,可以针对自己这个程序添加新的类型,新的类型是使用基本数据类型一起进行构造,把那些基本数据类型作为新类型的一部分,描述一个信息。
1、结构体
创建出一种类型,在类型中描述出组成部分,作为一个新类型表示,每个部分就是一个属性成员
struct
结构体名
(
就是类型名
)
{
类型成员
数据类型1
变量名
1;//
成员,多个成员共同构成类型
数据类型2
变量名
2;
数据类型3
变量名
3;//
只是表示新的结构体类型中有这个变量成员,在这里不是表示定义变量
};
结构体变量定义: struct 结构体名 变量名;
结构体变量初始化: struct 结构体名变量名
= {成员值1,成员值2,成员值3,成员值4};
结构体变量大小: 结构体在存储时有一个字节对齐,一般都是4
字节对齐(
既后面出现了比前面字节大的类型,就按后面的计算。如果后面比前面小,则按大的类型字节计算。
)
2、共用体(联合体)
union
共用体名
{
类型成员
数据类型1
变量名
1;//
成员,多个成员共同构成类型
数据类型2
变量名
2;
数据类型3
变量名
3;//
只是表示新的结构体类型中有这个变量成员,在这里不是表示定义变量
};
共用体所有成员公用同一个空间,共用体空间为最大成员的空间,其他都是和结构体一致,共用体修改任意成员,由于共用空间,所有成员都被迫修改。
3、枚举
一种特定的整型变量,把所有能够取的整型值都列举出来,定义的枚举变量只能从列举的值进行选择取值。
enum
枚举名
(
类型名
)
{
枚举元素1
,
枚举元素2
,
枚举元素3
,
枚举元素4
,
枚举元素5,
....
};
当枚举元素没有定义值时,默认第一个为
0,之后的每个枚举元素 在上一个枚举元素的基础上+1
枚举变量定义:enum
枚举名 变量名;