目录

1.函数是什么?

数学中我们常见到函数的概念。但是你了解C语言中的函数吗? 维基百科中对函数的定义:子程序

  • 在段落引用计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method,subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组
    成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。
  • 一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软 件库。

 

2.C语言中函数的分类:

1.库函数
2.自定义函数
 

(1)库函数

那怎么学习库函数呢?
C语言库查询:www.cplusplus.com
如下:
C语言——函数_函数
简单的总结,C语言常用的库函数都有:

  • IO函数
  • 字符串操作函数
  • 字符操作函数
  • 内存操作函数
  • 时间/日期函数
  • 数学函数
  • 其他库函数
    库函数实例
    C语言——函数_函数实例_02
    1.代码如下(strcpy示例):
    将字符串拷贝到另一地址
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
    char arr1[] = "hello";
    char arr2[] = "###########";
    strcpy(arr2, arr1);
    //strcpy->string copy 字符串拷贝,拷贝字符串(含‘\0’)
    //strcpy(拷贝目的地,字符串拷贝地址)
    printf("%s\n", arr1);

C语言——函数_自定义函数_03
 
2.代码如下(memset示例):
字符串替换

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
    char arr1[] = "hello world";
    memset(arr1, '*', 5);
    //memset(目的地,改变值(整形),改变个数)
    printf("%s\n", arr1);
    return 0;
}

C语言——函数_库函数_04

 
: 但是库函数必须知道的一个秘密就是:使用库函数,必须包含 #include 对应的头文件。 这里对照文档来学习上面几个库函数,目的是掌握库函数的使用方法。
如何学会使用库函数?
 
学会查询工具的使用:

MSDN(Microsoft Developer Network)
www.cplusplus.com
zh.cppreference.com

(2)自定义函数

函数的组成:
C语言——函数_函数_05
 
定义函数
函数体:即定义的函数中{}中的部分,交代的是函数的实现
我们举一个栗子:

写一个函数可以找出两个整数中的最大值。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
//求两数中的较大值
//定义函数
int get_max(int x, int y)
{
    if (x > y)
        return x;
    else
        return y;
}
int main()
{
    int a = 0;
    int b = 0;
    scanf("%d%d", &a, &b);
    //函数的使用
    int max = get_max(a, b);
    printf("max = %d\n", max);
    max = get_max(100, 300);
    printf("max = %d\n", max);
    return 0}

C语言——函数_函数_06

//使用函数编写代码实现两数交换
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
//直接传递值进行交换,无效
//对形参的修改不会改变实参
//形参是实参的一份临时拷贝
void Swap1(int x,int y)//形参
//void表示空,无,此函数没有返回值,所有用void
{
    int tmp = 0;
    tmp = x;
    x = y;
    y = tmp;
    printf("x = %d  y = %d\n", x, y);//x,y交换成功,但x,y的值与a,b交换没有关系
}
//通过指针,取地址交换a,b的值有效
void Swap2(int* pa, int* pb)//形参
{
    int tmp = 0;
    tmp = *pa;
    *pa = *pb;
    *pb = tmp;
    printf("*pa = %d  *pb = %d\n", *pa, *pb);
}
int main()
{
    int a = 0;
    int b = 0;
    scanf("%d%d", &a, &b);
    printf("a = %d  b = %d\n", a, b);
    int tmp = 0;
    //tmp = a;
    //a = b;
    //b = tmp;//将这三条交换程序写成函数
    //调用Swap1函数——传值调用
    Swap1(a, b);//实参
    printf("a = %d  b = %d\n", a, b);//无效交换
    //调用Swap2函数——传址调用
    Swap2(&a, &b);//实参
    printf("a = %d  b = %d\n", a, b);//交换有效
    return 0;
}

C语言——函数_函数实例_07
 

3.函数的参数

(1)实际参数(实参):真实传给函数的参数,叫实参。实参可以是:常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。
(2)形式参数(形参):形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。

上面Swap1和Swap2函数中的参数 x,y,pa,pb 都是形式参数;在main函数中传给Swap1的a,b和传给Swap2的a,b是实际参数。 形参实例化之后其实相当于实参的一份临时拷贝。