汉扬编程 C语言入门 C|函数调用与参数(形参与实参)传递(传值与传址)

C|函数调用与参数(形参与实参)传递(传值与传址)

“函数调用”是启动一个函数。当一个函数调用另一个函数时,调用者称为主调函数,被调用者称为被调函数。一个已经定义过的函数,只有在发生函数调用时才能被执行。

C|函数调用与参数(形参与实参)传递(传值与传址)

1 函数类别

函数是C程序的基本组成单位,一个C程序由一个main()函数和若干个子函数组成。函数分为主函数、标准库函数、用户自定义函数。

2 函数声明

函数声明的作用是在程序编译阶段对函数调用的正确性进行检查,包括对函数的返回值类型、函数名、形参表进行检查。

2.1 函数声明的一般格式:

I 函数返回值类型 函数名(类型 形参1,类型 形参2,…,类型 形参n);

II 函数返回值类型 函数名(类型1,类型2,…,类型n);

2.2 如果函数定义在前、调用在后,可以缺少函数声明。但是如果函数调用在前,定义在后,就必须添加函数声明;

2.3 如果函数声明放在所有函数定义的前面,说明这些函数都可以调用被声明的函数。如果函数声明放在某个函数定义的内部,说明只有这个函数才可以调用被声明的函数;

2.4 同一个函数可以被声明多次,但是只能被定义一次。

3 函数定义

“函数定义”是为实现某一特定功能而编写的程序块。

3.1 函数定义的一般格式:

函数返回值类型 函数名([类型 形参1,类型 形参2,…,类型 形参n]);

{

说明语句(数据输入部分)

执行语句(数据处理部分)

[return;] 或者 [return 表达式;](数据输出部分)

}

3.2 函数无返回值时“函数返回值类型”需要写成“void”,函数体内可以省略return语句或写成“return;”的形式;

3.3 函数定义时,函数名后面用小括号括起来的参数称为形式参数,简称形参。形参表的第一个作用相当于定义变量;第二个作用接收实参传递过来的值。

4 函数调用的一般格式和形式

4.1 函数调用的一般格式:函数名([实参表]);

4.2 如果函数定义时有形参,则函数调用时必须有对应的实参。如果函数定义时没有形参,则函数调用时无实参,写一对空的小括号即可;

4.3 实参以表达式的形式出现,实参前面不能写数据类型标识符;

4.4 函数调用的三种方式

I 函数语句形式:是指函数调用作为一条独立的语句,这种调用方式不要求函数有返回值。如:

printf(\”Hellow world!\”);

II 函数表达式形式:是指函数调用作为表达式的一部分,这种调用方式要求函数必须有返回值,如:

y=sqrt(9)+x;

III 函数实参形式:是函数调用作为其他函数的实参,这种调用方式要求函数必须有返回值,如:

printf(\”y=%lf\\n\”,sqrt(9));

5 实参与形参

5.1 函数声明和定义时的参数称为形参,函数调用时的参数称为实参,不管是形参还是实参,有多个时,需要用逗号隔开;

5.2 函数调用时,只能是实参值给形参,反过来不行,这称为“传值的单向性”;

5.3 实参与形参应保持“个数一致”、“类型一致”、“顺序一致”;

5.4 形参是变量,每个形参前面必须有数据类型说明符。实参是表达式,实参前面不能有数据类型说明符。

6 函数调用的过程

函数调用的过程是指流程从主调函数跳转到被调函数中,从被调函数的第一条语句执行到最后一句,然后再返回主调函数的过程,如下图所示:

6.1 主调函数向被调函数传递数值是通过参数完成的(即实参向形参传递数值);

6.2 被调函数向主调函数传递数值是通过return语句完成的;

6.3 参数和return语句就好比架在主调函数与被调函数之间的桥梁,通过它们实现函数之间传递信息数值;

7 参数的传值方式与传地址方式

7.1 传值方式与传地址方式的比较

比较内容参数的传值方式参数的传地址方式参数类型传值方式下的实参是数值,对应的形参是普通变量传地址方式下的实参是地址,对应的形参是指针变量传递的信息发生函数调用时,实参将其数值传递给对应位置的形参变量发生函数调用时,实参将其地址值传递给对应位置的形参指针,于是形参便指向了对应实参的存储单元特点形参获得了实参传递过来的数值,但是形参在被调函数中的任何改变,并不会反过影响实参形参获得了实参传递过来的地址值,于是形参指针指向了实参的存储单元,因此在被调函数内部,可以借助形参指针间接访问并修改实参的值7.2 传地址方式的应用场合

I 如果子函数调用后,有多个数值需要带回主调函数,就必须使用参数的传地址方式;

II 如果子函数调用过程中,需要访问并修改主调函数中某些变量的值,就必须使用参数的传地址方式,此时应将主调函数中需要被修改的变量地址作为实参。

8 函数的递归调用

一个函数如果自己调用自己,则称为直接递归调用;如果是A函数调用B函数,B函数又反过来调用A函数,则称为间接递归调用。

在递归调用中,主调函数又是被调函数,这种函数称为递归函数。

递归的过程就是递归函数反复调用其自身,为了防止递归调用无终止地进行下去,在递归函数内部必须要终止递归调用的手段。常用的办法是加条件判断,满足某种条件后就不再作为递归调用,而是转为逐层返回。

递归调用的特点是“逐层调用,再逐层返回”,逐层调用的次数和逐层返回的次数相同。

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/cjia/6139.html

怎样用c语言循环结构输出1到100之间的素?

怎样用一维数组写出C语言,输出杨辉三角的的前8行

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部