基本信息
文件名称:函数探秘:深入理解C语言函数,实现高效模块化编程.docx
文件大小:18.01 KB
总页数:7 页
更新时间:2025-06-21
总字数:约2.91千字
文档摘要

函数探秘:深入理解C语言函数,实现高效模块化编程

4.函数的参数

在函数使?的过程中,把函数的参数分为,实际参数和形式参数。下面我仍将以加法函数举例:

#includestdio.h

intAdd(intx,inty)

//函数名Add

//两个形式参数x,y,类型都是int

//返回类型也是int

intc=0;

c=x+y;

returnc;//返回x+y的和

intmain()

inta,b;

scanf(%d%d,a,

intret=Add(a,b);//加法函数

printf(两个数和为%d\n,ret);

return0;

4.1实际参数

顾名思义,实际参数就是实际存在的参数,也就是主函数main调用函数时传给它的参数,也就是上面主函数中的a,b。

4.2形式参数

同理,形式参数其实就是形式上的参数,也就是上面加法函数Add中的x,y。它并不是实际存在的,在未使用时并不会向内存申请空间,形式参数只有在函数被调?的过程中为了存放实参传递过来的值,才向内存申请空间,这个过程就是形式的实例化。

4.3实参与形参的关系

在介绍实参和形参关系时,我们先看看下面这段代码

#includestdio.h

voidswap(intx,inty)//返回类型为void表示不返回值

inttemp=0;//定义一个临时变量

temp=x;//把x的值赋给temp

x=y;//把y的值赋给x

y=temp;//把temp的值赋给y,完成交换操作

intmain()

inta=0;

intb=0;

scanf(%d%d,a,

printf(交换前:a=%d,b=%d\n,a,b);

swap(a,b);//交换函数

printf(交换后:a=%d,b=%d\n,a,b);

return0;

那么交换后的输出是多少呢~

为什么交换的值还是不变呢,我们可以通过调试来观察一下

通过调试,我们发现a与x,b与y只是在数值上相同,他们地址是完全不同的,他们在两个独立的内存空间互不影响,对x,y交换根本不会改变a,b的值。并且函数在调用完成之后,函数所申请的内存空间会归还系统~

所以我们总结实参与形参的关系是:形参只是实参的?份临时拷?,对形参改变根本不会影响实参

4.4数组做参数

我们前面学过的数组自然是也能作为函数的参数来使用,下面是一个具体实例:

voidprint_arr(intarr[],intsz)//打印数组

inti=0;

for(i=0;ii++)

printf(%d,arr[i]);

printf(\n

其中arr是整个数组,sz是数组元素的个数

5.嵌套调用和链式访问

5.1函数的嵌套调用

我们在前面已经学习了选择结构和循环结构的嵌套使用,那函数嵌套调用又是怎样的呢。其实,简单来说,就是函数中也可以调用函数

举个例子,让我们看看下面这段代码

voidprint2()

printf(helloworld\n

voidprint1()

print2();//调用print2函数

intmain()

print1();//调用print1函数

return0;

C语言函数支持嵌套调用,但是不支持嵌套定义。

5.2函数的链式访问

链式访问简单来说就是将?个函数的返回值作为另外?个函数的参数,像链条?样将函数串起来就是函数的链式访问。

举例:

这是strlen的函数声明:size_tstrlen(constchar*str)

#includestdio.h

intmain()

printf(%d\n,strlen(abcdef));

//根据strlen的返回值,我们就可以直接将其作为printf的参数

//这就是一种简单的链式访问

return0;

6.函数的定义与声明

6.1函数的定义

函数的定义就是指函数具体的实现过程,交代函数具体功能的实现

比如我们前面写的加法函数具体实现的过程就是函数的定义

intAdd(inta,intb)

returna+b;//直接返回

但是特别注意函数不能嵌套定义

inta