您的位置:首页 > 编程语言 > C语言/C++

C语言学习笔记 lesson14 函数

2016-09-30 19:25 351 查看

函数

函数是C语言的重要的组成部分,过程编程是将程序的执行过程一步步的分解成函数。

分解成函数方便进行工程的管理,方便多次调用。

组成

函数名称 (C语言中不能重复)

参数 (函数中需要的数据)

返回值

函数参数的传递过程

main函数和 其他函数各有栈针。当函数经过return后,函数的栈会清空。所以函数执行完后,函数中的局部变量就会失效。

#include<stdio.h>

int Greater(int first, int second)     接收两个int参数,从外部将值传递到内部 

{

if (first > second)

{

return first;            必须直接返回直接类型的数据

}

else

{

return second;

}

}

int main()

{

int bignum = Greater(10, 100); 

return 0;

}

main函数反汇编

int bignum = Greater(10, 100);

002216FE  push        64h            函数是通过栈来传递的

00221700  push        0Ah  

00221702  call        _Greater (0221221h)  

00221707  add         esp,8  

0022170A  mov         dword ptr [bignum],eax  

return 0;

0022170D  xor         eax,eax 

esp

0x00D7FCE0  c8 fd d7 00     main的栈底

0x00D7FCF0  46 10 22 00    返回的地址

0x00D7FCEC  64 00 00 00   传递的参数 100

0x00D7FCE8  0a 00 00 00    传递的参数 10

函数反汇编

int Greater(int first, int second)

{

00221690  push        ebp  

00221691  mov         ebp,esp  

00221693  sub         esp,0C0h  

00221699  push        ebx  

0022169A  push        esi  

0022169B  push        edi  

0022169C  lea         edi,[ebp-0C0h]  

002216A2  mov         ecx,30h  

002216A7  mov         eax,0CCCCCCCCh  

002216AC  rep stos    dword ptr es:[edi]  

if (first > second)

002216AE  mov         eax,dword ptr [first]  

002216B1  cmp         eax,dword ptr [second]  

002216B4  jle         Greater+2Dh (02216BDh)  

{

return first;

002216B6  mov         eax,dword ptr [first]  

002216B9  jmp         Greater+30h (02216C0h)  

}

002216BB  jmp         Greater+30h (02216C0h)  

else

{

return second;

002216BD  mov         eax,dword ptr [second]  

}

}

指针:特殊的数据类型  

里面存储的是内存地址,使用了指针,传递的就是地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: