M牛C原创博客——oc开发基础——C语言知识点01

1.联合union

与结构体相类似,只是结构体可以保存多个成员的信息,而联合只能保存一个成员的信息。

语构规则:

typedef union{

成员;

}别名;

2.枚举

a.描述一组有规律数据

b.文本来区分数据,更容易区分数据

c.规范数据的范围

语法规则:

enum 枚举名称{枚举的值1,枚举的值n};

枚举除了声明部分,是不可以修改的。

如果在声明的时候修改了枚举的值,后面的值是前面的值加1

枚举的值默认是从0开始。

练习:SPR SUM AUT WIN

使用枚举的值来描述季节,输入一个数字,并输出相应的季节。

3.任意类型指针void*

可以指向任意类型的内存区域。

但使用前必须进行类型转换

void *p = &i;

int *p2 = (int *)p;//强制类型转换

*p2… //确定了具体的类型才可以寻址

4.函数指针

指向函数所在内存中的地址。

语法格式:

返回值类型(*函数指针变量名)(参数类型 参数名);

函数指针可以调用函数

函数指针可以作为参数

Block…

5.堆内存管理

进程内容空间:

代码区:只读 字符串/函数

栈区:读写 变量

全局区:读写 全局变量/静态变量

堆区:读写 任意类型数据


代码区、栈区、全局区是自动内存管理。操作系统

堆区是由程序员手动内存管理。

堆区最大的特点:由程序员开辟内存空间,销毁内存空间。


在C语言中,通过4个函数就可以管理内存。

a.malloc

语法格式:空间的首地址 = malloc(空间大小/字节)

分配(申请)一个堆内存空间。

分配内存如果成功,则返回分配空间的首地址。

如果分内存失败,则返回一个NULL值(空)。

void* p = malloc(申请空间大小/字节);

#include <stdlib.h>

b.calloc

分配(申请)一个堆内存空间,分配内存空间后,会进行清零或初始化操作。

语法格式:空间的首地址  = calloc(元素个数,元素大小);

c.realloc

对以经申请的空间大小不满意,是可以调整该空间大小的。

调整空间的时候存在两种情况,则在原来的位置调整,如果原来的位置不可以调整,则创建一个新的位置,并且将原来数据复制到新空间,并自动销毁原来的内存空间。

int *newP = realloc(p, NULL); -> free()相等

   int *newP = realloc(NULL, sizeof(int)*5); 

->malloc()相等

d.free

语法格式:free(首地址);

可以释放、销毁堆内存空间。e.野指针

当堆内存销毁的时候,指针变量的值依然存在,指向了一个不合法的内存区域,野指针。

f.空指针

空指针可以解决野指针问题,当堆内存销毁的时候,有责任将指针变量置空,避免访问不合法的内存区域。

总结:需要使用堆空间,要开辟堆内存空间,使用完毕后,程序员有责任将内存空间释放掉,注意野指针问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值