多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
#### 零起点学通C语言摘要 #### #### 函数 #### #### 函数的运行原理 #### #include<stdio.h> int add(int x,int y) //形式参数x和y { int z;//局部变量z z=x+y; return z;//返回值 } int main() { int x=1,y=2; add(x,y);//调用add()函数,假设该指令的地址为1003,指令指针先保存该地址, //然后将该地址值加1,使其指向下一条指令,即return语句,该地址随后被放置在栈中ibng, //则add函数调用结束后,将返回到return来执行 //1、将下一条指令的地址保存到栈中 //2、跳转到add函数的定义处执行 return 0; } 当函数被调用时,指令指针的地址值增加1,使其指向函数调用后的下一条指令,该地址随后被放置在栈中,它将作为函数返回的返回地址。指令指针用于存放下一条待执行指令的地址 函数也有也址.不过该地址保存在目标文件的符号表中(函数各是-个符号, 该符号对应输-个标号.这个标号就是函数的地址. 一般为相对地址,即函数第-条指令相对于程序代码区起始位置的偏移量),当调用某个函数时,就从符号表中提取该函数的地址。也就是该函数第1 条指令的地址,然后由寄存器中的指令指针来保存。 **函数入栈如图所示** ![](http://i.imgur.com/Mldviay.png) **函数出栈如图所示** ![](http://i.imgur.com/wdjckLq.png)