函数,英文名称function,function的更贴切的意思是“功能”或者是说“作用”,但是在中国为什么将function翻译成函数,我非常不理解,也许函数这个名称更加“高大上”的缘故吧!
一、函数的由来
一个程序经常会通过多次执行相同或者相近功能的程序段来完成,在早期的程序设计中,这些重复的功能段必须通过重复书写代码来实现。这样,不仅会引起重复的劳动、增加程序的长度、造成代码的不一致,而更重要的是,大量重复的程序代码不利于程序的立即与理解。
于是人们将功能重复的程序段抽象出来形成一个独立的功能模块,并为它命名,程序中凡是用到此功能模块的地方就用他的名字代替,这样避免了重复设计的缺点。这种抽象出来的功能模块成为函数或者子程序。
二、函数的执行过程
当调用一个函数时,整个调用过程分为三步进行,第一步是函数的调用,第二步是函数体的执行,第三步是返回,即返回到函数调用表达式的位置。
第一步:函数调用
1、将函数调用语句下一条语句的地址保存到在栈中,以便哈数调用完成后返回。(将函数放到栈空间中称为压栈)。
2、对实参表从后向前,一次计算出实参的值,并且将值压栈。
3、跳转到函数体处。
第二步:函数体执行
4、如果函数体中定义了变量,将变量压栈
5、将每一个形参以栈中对应的实参值取代,执行函数体的功能体。
6、将函数体中的变量、保存到栈中的实参值,依次从栈中取出,释放栈空间(出栈)。
第三步:返回
7、返回过程执行的是函数体中的return语句。其过程是从栈中取出刚开始调用函数时压入的地址,跳转到函数的下一条语句。当return语句不带有表达式时,按照保存的地址返回,当return语句带有表达式时,将计算出的return表达式的值保存起来,然后再返回。
三、小结
上面我大体的说了函数执行的过程,此过程是在C或者C++的基础上编写出来的,函数的执行的过程其实还涉及参数的传递方式,包括传值、传地址等,传值的方式我会在下一篇博客详细解释,通过上下这两篇文章的对比,我们会对函数的了解更加深入一些。