C语言之函数(2)

上篇博客讲到了函数的返回值及类型,本篇我们将继续上篇的脚步,继续介绍函数的参数及传递方式,函数调用,内部函数和外部函数。

四、函数的参数和传递方式

1、形式参数和实际参数

形参出现在被调函数当中,在整个函数体内都可以使用。形参在定义时编译系统并不分配存储空间,只有在调用函数时才分配内存单元。调用结束内存单元被释放,故形参只有在函数调用时有效,调用结束时不能再使用。

实参出现在主调函数当中,当函数调用时,主调函数把实参的值传递给被调函数的形参,从而实现函数间的数据传递。传递方式有两种:值传递和地址传递方式。

2、变量作为函数的参数

当形参定义为变量时,实参可以是常量、变量和表达式,这种函数间的参数传递为值传递方式。值传递的特点是参数的“单向传递”。

由于是值传递,单向传递,并不会改变a,b的值。

3、数组作为函数参数 

数组元素又称为下标变量,它具有普通变量的一切性质,因此数组元素作为函数的实参进行数据传递是与普通变量没有任何区别,也是值传递

 同样是值函数并不会改变a[0]的值。

数组名作为函数参数

数组名是一个地址,是数组的首地址,因此用数组名作为函数的参数进行数据传递时,执行的是地址传递方式。所谓地址传递,顾名思义,实参传递的不是数据本身,而是数据存在的地址。函数调用时,把数组名即数组的首地址作为实参传递给形参(必须是可接受地址的数组名或者指针变量),形参数组名取得首地址后就有了实在的数组,这时实际上实参和形参是同一个数组,指向同一个数组,指向同一段存储空间,实参的改变就是对形参的改变,所以传址方式可以看作是数据进行了“双向传递”。

数组指针,即数组元素的地址作为函数参数

由于数组函数的地址的本质仍然是地址,所以属于地址传递方式。

 注:

五、函数调用

发生调用时,调用函数把实参的值复制一份,传送给被调用函数的形参,从而实现调用函数向被调用函数的数据传送。

1、形参调用时占据内存,调用结束后所占据储单元被释放。

2、实参可以是常量、变量、表达式、函数,但是进行函数调用时必须具有确定的值。

3、实参对形参的数据传送是单向的。

4、实参和形参占用不同的内存单元,即使同名也互不影响。

 六、外部函数和内部函数

外部函数

开发大型项目,可能包含很多源文件来分别实现,最终再整合到一起,有时,一个源文件 中,需要调用其他源文件中的函数。

调用外部函数前,需要在当前源文件定义外部函数。

定义外部函数的方式,在函数的返回值类型之前添加extern关键字。

C语言中定义外部函数时,可以省略关键字extern。
注意:声明外部函数时,无论有没有关键字extern,外部函数与原函数定义的返回值类型,函数名称和参数必须一致。

内部函数

在定义内部函数时,需要在函数的返回值类型前面添加static关键字,也称静态函数。

如果将第二个文件中的static去掉程序会出错。

关于函数就暂时讲这么多,以后会逐渐补充,谢谢您的关注和支持,有不足之处还请多多指教。本人QQ:2571566392 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值