C语言——函数(函数定义,函数调用、说明,函数传参)

        函数是执行一个任务的多条语句的集合。每个 C 程序都会至少有一个主函数 main() ,所有简单的程序都可以定义其他额外的函数。在逻辑上,通常是根据每个函数执行一个特定的任务来进行划分。函数还有很多叫法,比如方法、子例程或程序。

        函数声明告诉编译器这个函数的名称、返回类型和参数。函数定义则提供函数的主体。

        C 标准库提供了很多可以调用的内置函数。例如,函数 strcat() 用来连接两个字符串,函数 memcpy() 用来复制内存到另一个位置。

一、函数的定义

函数 为了实现特定功能的独立代码模块 ;
C库函数 :scanf()         printf()        stelen()        strcat() .......
函数的一般形式
<数据类型> <函数名> (形式参数说明)
{
    函数体;
    return (表达式);
}

数据类型:和返回值保持一致,没有返回值数据类型为void;

函数名:是一个合法的标识符;

函数名也是函数的入口地址;

形式参数说明:
    简称形参,可以有多个形参也可以没有,如果有多个参数用 ','隔开;
    作用:告诉函数调用者,在调用函数的时候确定传递的参数的类型;

函数体:可以为大于等于0条语句;

return: 作为返回值,和数据类型保持一致,数据为void没有返回值,
可以写return 或者不写;

二、函数的调用

 函数名 ( 实际参数 );
eg
        char ch = getchar ();

三、函数的说明(函数原型)

< 数据类型 > < 函数名 > ( 形式参数说明 );
在说明函数的时候可以只写形参的类型 ;

四、函数的传参

函数传参的实质:
将实参作为形参的初始化;
① 全局变量
② 复制传递
将实参的值复制给形参,形参不能修改实参的值;
eg:
    int a = 10, b = 20;
    int ret = addFunc(a, b);
eg:
    输入两个数 a 和 b ,调用一个自己封装的函数实现交换;
③ 地址传递
将实参的地址传递给形参,形参可以修改实参的值;
eg:
    int a, b;
    myswap(&a, &y);

五、数组作为参数传递

复制传递:
eg:
    testArray(arr, 5);
    函数原型:
    int testArray(int p[], 5);
    //sizeof(p) == 8 ; //64位操作系统
地址传递:
eg:
    testArray(arr, 5);
    函数原型:
    int testArray(int *p, 5);

总结:

        复制和地址传递,实质上都是将数组的首地址赋值给一个指针
变量,只是形参的表现形式不同;

        数组在传递参数的时候一般都需要传数组的长度;

六、指针函数

返回值为一个地址的函数;
一般形式:
    《数据类型》* 《函数名》(形参)
    {
        函数体;
        return 地址量;
    }

七、练习题

1.有一字符串,包含n个字符。编写一个函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串

2.将n个数输入时顺序的逆序排列,用函数实现

3.有一个班的4个学生,有5门课程。
    1)、求第一门课的平均分;
    2)、找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均分
    3)、找出平均分在90分以上或全部课程成绩在85分以上的学生。
    分别编写三个函数来实现以上三个要求
4.实现函数char *mystrcat(char *dest, const char *src);

猜你喜欢

转载自blog.csdn.net/L_Blue_/article/details/134596636