马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本节学习内容
1.指针操纵与布局体
2.函数(递归函数)
3.动态内存
一、指针操纵与布局体
指针可以作为布局体的内部成员使用,也可以使用布局体指针操纵布局体空间。
二、函数
1.指针函数
(1)什么是指针函数?
指针函数本质是一个函数,该函数的反回值是一个指针。
比方·:int* p(int x,int y);
2.函数指针
函数指针是指向函数的指针。
比方:
int add(int x,int y);
int max(int x,int y);
int (*fun)(int add,int max);//函数指针
3.递归函数
1.分治战略: 是将规模比力大的标题可分割成规模较小的雷同标题。标题稳固, 规模变小。这自然导致递归过程的产生。分治与递归像一对孪生兄弟,经常同时应用在算法筹划之中, 并由此产生许多高效算法。
递归: 若一个函数直接地或间接地调用自己,则称这个函数是递归的函数。(简朴地形貌为“自己调用自己”) 。
2.分治法所能办理的标题一样寻常具有以下四个特性:
1) 该标题的规模缩小到肯定的水平就可以轻易地办理。
2) 该标题可以分解为多少个规模较小的雷同标题。
3) 使用小规模的解,可以归并成, 该标题原规模的解。
4) 该标题所分解出的各个子规模是相互独立的。
3.分治法步调:
在分治战略中递归地求解一个标题, 在每层递归中应用如下三个步调:
分解: 将标题分别成一些子标题, 子标题的情势与原标题一样, 只是规模更小。
办理: 递归地求解子标题。如果子标题的规模充足小, 则制止递归, 直接求解。
归并: 将小规模的解组合成原规模标题的解。
如下,递归实现快速排序
三、动态内存
1.动态内存开发在哪个地域?
堆区
2.堆区与栈区的区别
(1)巨细
栈约1M(体系管理内存)
堆区内存windows中 约1.5G~1.9G linux中约2.9G(步伐员管理)
(2)内存分配方向
栈内存开发:高地点—>低地点
堆内内存开发:低地点->高地点
(3)管理方式
栈:体系管理内存
堆:步伐员管理
3.动态内存的开发(malloc)
头文件:stdlib.h
申请内存时内存前会申请一个指针头生存申请内存的巨细
比方:int* p=(int*)malloc(10*sizeof(int));
动态内存申请后要判断是否申请乐成
assert(p!=NULL);
4.动态内存扩容(realloc)
比方:对上方申请的动态内存举行2倍扩容
int* q=(int*)realloc(p,2*(10sizeof(int)));
扩容乐成后要判断是否申请乐成
assert(q!=NULL);
6.动态内存的开释
比方:free(p);
由于指针头的存在以是开释动态内存时会知道开释的巨细
7.malloc与calloc的区别
malloc申请的空间开始存放的是随机值
calloc申请的空间存放的为范例默认值0(相当于初始化)
8.free出现瓦解的缘故原由有哪些?
1)同一块内存多次开释 会瓦解
办理:方法使 p=NULL
2)free(指针)开释的指向必须是malloc申请的出发点地点 否则会瓦解
3)开释的优劣堆区空间内存 会瓦解
8.free怎样知道它要开释巨细?
9.扩容的三种环境
扩容环境1:如果mallock申请的内存后有充足的空间那么就直接反面举行扩容
扩容环境2:如果后空间不敷就会额外别的开一块大空间,将原始空间的数据拷贝到新空间当中并举行原空间的开释,返回新空间的地点。
扩容环境3:如果扩容空间 > 剩余最大空间则扩容失败 return NULL
|