C学习之动态内存管理与构造类型

        每个被执行的C 程序为了管理方便,系统会为每个执行的程序分配一个虚拟内存空间,方便管理。在虚拟内存空间每个应用程序都是一样,虚拟内存布局都是一致的。通过映射的方式在物理内存上执行。
        虚拟内存的分布包括:内核空间、栈、堆、数据段、代码段以及一个不可访问的空间

存储类型

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 枚举名 变量名;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啵啵520520

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值