内存分区与函数调用.ppt_第1页
内存分区与函数调用.ppt_第2页
内存分区与函数调用.ppt_第3页
内存分区与函数调用.ppt_第4页
内存分区与函数调用.ppt_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,代码区(代码段,函数区),顾名思义:用于存放代码,这里特指函数的代码。 存放了唯一一份函数定义的二进制代码。 有全局的地址:函数名称。,2,栈区,函数调用时临时开辟的内存空间。 由系统自动分配,自动回收。 类似数据结构中的栈。,3,带参数的函数,void fun(int a, int b) int c = a * b; printf(“c=%dn“,c); int main() int a = 0; fun(2, 4); return 0; ,4,函数调用(示意图),main,a,0,4,fun,c,a,b,2,8,printf,system,5,函数调用,调用 开辟栈空间。 值拷贝:形式参数(形参)拷贝实参的值。 返回 函数在遇到return语句,或函数体结束时返回。 有返回值的函数,函数调用结束后,会把返回值放在某个地方(寄存器),由函数的调用方读取。,先声明再使用,无论是函数,还是变量,都遵循先声明(定义)再使用 函数中声明的局部变量,要放在函数体的前部 全局变量(函数之外)放在它被使用之前。,2019/4/16,6,7,参数传递,传变量 void f(int a) 传地址(传指针) void f(int * p) 传引用(C+) void f(int & p) 传数组(一维) void f(int a,int n),传递数组,一维数组传递参数:f(int a,int n) 指向数组元素首地址的指针p,元素个数n p用来偏移地址,迭代地指向每个元素 n用来限定偏移的范围,以防止非法访问 二维数组的两种传递参数的办法,8,int b23 void g(int (*b)3, int n) void g(int b3, int n) void g(int *b, int m, int n),9,堆区,程序员自己分配,自己回收。 程序结束时,操作系统会回收其所占用的进程空间。 堆的生长方向是向上的,向着内存地址增加的方向;栈生长方向是向下的向着内存地址减小的方向 在堆上可以声明动态数组。,int *p = malloc(sizeof(int); printf(“*p = %pn“,*p); free(p); p = NULL;,10,静态区,存储全局变量和静态变量。 静态限定作用域 全局变量可以是静态的,静态变量不一定是全局的。 全局变量在main函数之前就已经存在。 程序结束后,由操作系统统一回收。,11,文字常量区(只读数据段),存放字符串,程序结束后由操作系统释放。 函数可以返回字符常量的地址,也可以返回堆区的地址,但不能返回局部变量的地址。,进程内存布局示意图,2019/4/16,12,静态区(全局+static),文字区(字符串),代码区(函数),堆(malloc,free),栈(调用函数),Windows Kernel,Share Space,13,习题,求一个整型数组的所有元素之和 对一个整型数组的元素序列进行反转。即对调ai与an-1-i 设计一个连接两个字符串的函数,例如 s1 = “china“; s2 = “people“; 连接后变成“chinapeople“;,14,思考,传指针的优缺

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论