函数调用以及数组实参的传参方法

文章目录

    • 函数调用:
    • 函数调用关系:调用者与被调用者
    • 调用的原理:
      • 栈的具体介绍:
      • c语言角度的栈:
      • c语言将内存空间分为了5份:
    • 调用的本质:
  • 特殊的函数调用:递归
    • 概念:自己调用自己。
    • 形式:
    • 使用思路:
  • 数组作为函数参数的情况:
    • 总结:

函数调用:

函数调用关系:调用者与被调用者

int GetMoonDays(void)
{
	isleapyear(); //其中该函数运用到了函数的嵌套,即在函数之中调用函数
}
int main (void)         //其中main是调用者,GetMoonDays()此处是被调用者,main是整个程序的入口,只能是调用者
{
printf("GetMoonDays()");
}

函数调用过程中保证返回时程序继续执行的关键:
程序计数器(Program Counter,PC)是计算机处理器的一个寄存器,它存储着当前正在执行的指令的地址。
pc-program counter 程序计数器 负责拿下一条执行的语句,给cpu执行。

作用:
保存现场:记录main执行到哪个位置,然后才去别的位置执行函数。
恢复现场:函数执行完回到main,找之前的记录然后恢复之前的进程。


调用的原理:

调用过程和栈息息相关。
入栈:调用别的函数时,就把现在执行主程序产生的数据放到栈里
出栈:调用的函数执行完毕之后,就把栈里的数据拿出来,继续主程序的执行。

原理语言化:
在这个过程中如果出现函数的嵌套,则放进栈里的数据就堆叠起来,先进栈的数据在栈低,后进的就在栈顶,函数返回的时候就一层一层从栈顶到栈底把数据拿出来,最后回到主函数,继续将主函数执行完。

栈的具体介绍:

栈也可以看作时一种数据结构,表示类似数组的组织形式。
特点:先进后出。
栈的原理图


c语言角度的栈:

本质上是一块内存空间。
但是使用方式时按照上图栈的结构原理来运用的。
并且栈一般用于存放局部变量 //局部变量即其自动申请,自动释放的变量


c语言将内存空间分为了5份:

:主要是用来存放自动变量或函数调用之前的数据。(其中栈博人大小为8G但是可修改)
:空间大,堆上的空间,手动申请,手动释放。
字符串常量区域:存储字符串常量,只可读不可改。
***静态区:***存放全局变量和静态变量
代码区:只读

调用的本质:

实际上是利用栈的结构先进后出保证函数可以层层嵌套调用。
函数可以层层嵌套调用。

特殊的函数调用:递归

概念:自己调用自己。

形式:

直接调用:自身调用自身。
间接调用:两个函数互有彼此,然后不断调用对方函数。

类似与循环,然后不断调用对方函数。

使用思路:

处理要求问题n则要先处理n-1由此层层往前递归。

数组作为函数参数的情况:

数组元素作为函数参数
数组本身作为函数参数。
即将整个数组的地址给调用的函数。

总结:

一维整形数组做函数参数。
形参:写成数组形式,即 a[](括号内不写数的原因:其形参以该格式出现是用于表明数据类型,传的是地址,定义数组长度没用。)
实参:数组名,数组长度。

举例:
	定义中
	int Arrayprint(int a[],int len)
	主函数中
 	Arrayprint(a,len);

编译器实际理解的形式
	Arrayprint(int A*,int len);
	Arrayprint(a,len);
  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值