C 函数

函数的定义,声明,调用

定义(也叫实现),是指对函数功能的确立,包括函数名、函数返回值类型、形参、函数体。

声明(也叫原型)告诉编译器函数的参数数量、每个参数的类型以及返回值的类型。函数声明时形参名可以省略。但不建议这么做,因为形参名可以给我们提供信息。

函数调用即函数的使用 在程序中,是通过对函数的调用来执行函数体的。调用之前必须先声明,头文件的作用就在于此。


函数的返回值

函数的返回值存放在主调函数函数栈中,在被调函数退栈前传递给主调函数的。

如果返回值是地址,则要引起足够的警惕:

1.形参、局部变量的地址?

2. 是由函数malloc产生的首地址? 

3.全局变量、静态变量的地址?

若是1,没有意义!函数已经退栈。

若是2,则要追踪其何时释放,是否可以合法使用。

若是3,则平安无事。只不过静态变量的作用域会受影响。


函数调用的详细过程

①跳转到代码区内函数所对应的首地址

②创建函数栈帧(分配内存空间)

③函数有参数,进行参数传递先计算实参表达式的值,再赋给形参变量。

④执行函数体

⑤返回调用点并交出计算结果,即返回值。⑥释放运行栈

递归调用很简洁,但要注意程度,防止栈溢出,尤其是嵌入式开发这种堆内存分配要求很严格的情况


数组、指针和函数的联系

数组名作函数参数时,自动退化为指针。函数得到的仅仅是数组的首地址,而不是象传值时那样拥有自己的数据存储空间。

因此主函数和子函数是对同一个数据空间(数组)进行操作,形参的任何改变会导致实参值的改变。

函数接口的两个要素是参数和返回值。

参数传递时,传什么就拷贝什么的值!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值