学懂C语言(十四):认识C语言中的函数

         

目录

一、函数的基本概念

二、定义函数

三、函数示例

示例1:一个简单的函数

示例2:带返回值的函数

示例3:不带返回值的函数

四、函数分类

1. 按照函数的功能分类

2. 按照返回值类型分类

3. 按照参数个数分类

4. 按照函数的作用范围分类

5. 按照调用方式分类

6. 按照使用的内存分配分类

示例代码


C语言中函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。

一、函数的基本概念

  1. 函数声明:告诉编译器函数的名称、返回类型和参数。
  2. 函数定义:包含函数的实际代码。
  3. 函数调用:在程序中使用函数来执行其任务。

二、定义函数

C 语言中的函数定义的一般形式如下:

return_type function_name( parameter list )
{
   body of the function
}

在 C 语言中,函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分:

  • 返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void
  • 函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。
  • 参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
  • 函数主体:函数主体包含一组定义函数执行任务的语句。

三、函数示例

示例1:一个简单的函数

假设我们需要一个函数来计算两个整数的和:

#include <stdio.h>

// 函数声明
int add(int a, int b);

// 主函数
int main() {
    int num1 = 5, num2 = 3;
    int result = add(num1, num2); // 函数调用
    printf("The sum is: %d\n", result);
    return 0;
}

// 函数定义
int add(int a, int b) {
    return a + b;
}

在这个示例中:

  • int add(int a, int b); 是函数声明,告诉编译器有一个名为 add 的函数,它接受两个 int 类型的参数并返回一个 int 类型的值。
  • int add(int a, int b) { return a + b; } 是函数定义,包含函数的实际代码。
  • int result = add(num1, num2); 是函数调用,程序执行到这里时会跳转到 add 函数,并将 num1 和 num2 的值传递给 a 和 b
示例2:带返回值的函数

假设我们需要一个函数来判断一个数是否为偶数:

#include <stdio.h>

// 函数声明
int isEven(int num);

// 主函数
int main() {
    int number = 6;
    if (isEven(number)) {
        printf("%d is an even number.\n", number);
    } else {
        printf("%d is an odd number.\n", number);
    }
    return 0;
}

// 函数定义
int isEven(int num) {
    return num % 2 == 0;
}

在这个示例中:

  • int isEven(int num); 是函数声明。
  • int isEven(int num) { return num % 2 == 0; } 是函数定义,返回一个布尔值(0 或 1),表示 num 是否为偶数。
  • if (isEven(number)) 是函数调用,根据返回值判断 number 是否为偶数。
示例3:不带返回值的函数

假设我们需要一个函数来打印一个字符串:

#include <stdio.h>

// 函数声明
void printString(const char *str);

// 主函数
int main() {
    printString("Hello, World!");
    return 0;
}

// 函数定义
void printString(const char *str) {
    printf("%s\n", str);
}

在这个示例中:

  • void printString(const char *str); 是函数声明,表示 printString 函数不返回任何值,并接受一个字符串参数。
  • void printString(const char *str) { printf("%s\n", str); } 是函数定义,打印传入的字符串。
  • printString("Hello, World!"); 是函数调用,打印字符串 "Hello, World!"。

四、函数分类

1. 按照函数的功能分类

  1. 库函数(Library Functions)

    • 由C标准库提供的函数。
    • 例如:printfscanfstrlenstrcpymalloc 等。
  2. 用户自定义函数(User-Defined Functions)

    • 由程序员自行编写的函数。
    • 例如:int add(int a, int b)void printMessage() 等。

2. 按照返回值类型分类

  1. 无返回值函数(Void Functions)

    • 不返回任何值,用void声明。
    • 例如:void printHello()
  2. 有返回值函数(Value-Returning Functions)

    • 返回一个特定类型的值。
    • 例如:int max(int a, int b)float calculateAverage(float a, float b) 等。

3. 按照参数个数分类

  1. 无参数函数(Parameterless Functions)

    • 不接受任何参数。
    • 例如:void displayMessage()
  2. 有参数函数(Parameterized Functions)

    • 接受一个或多个参数。
    • 例如:int sum(int a, int b)float area(float radius)

4. 按照函数的作用范围分类

  1. 全局函数(Global Functions)

    • 在所有文件中都可见,可以在多个文件中调用。
    • 默认情况下,所有函数都是全局函数,除非使用static关键字。
  2. 局部函数(Local Functions)

    • 仅在定义它们的文件中可见。
    • 使用static关键字定义,例如:static void helperFunction()

5. 按照调用方式分类

  1. 递归函数(Recursive Functions)

    • 函数调用自身。
    • 例如:计算阶乘的函数:int factorial(int n)
  2. 非递归函数(Non-Recursive Functions)

    • 函数不调用自身。
    • 例如:int add(int a, int b)

6. 按照使用的内存分配分类

  1. 普通函数(Regular Functions)

    • 在编译时分配内存。
    • 例如:常规的main函数和大部分用户自定义函数。
  2. 内联函数(Inline Functions)

    • 建议编译器在调用时将函数代码直接嵌入调用处,以减少函数调用的开销。
    • 使用inline关键字声明,例如:inline int add(int a, int b)

示例代码

#include <stdio.h>
#include <string.h>

// 库函数示例
void libraryFunctionExample() {
    char str[50];
    strcpy(str, "Hello, World!"); // 使用库函数strcpy
    printf("%s\n", str); // 使用库函数printf
}

// 用户自定义函数示例
int add(int a, int b) {
    return a + b;
}

// 无返回值函数示例
void printHello() {
    printf("Hello\n");
}

// 有返回值函数示例
int max(int a, int b) {
    return (a > b) ? a : b;
}

// 无参数函数示例
void displayMessage() {
    printf("This is a message.\n");
}

// 有参数函数示例
void printNumber(int num) {
    printf("The number is: %d\n", num);
}

// 递归函数示例
int factorial(int n) {
    if (n <= 1) return 1;
    else return n * factorial(n - 1);
}

int main() {
    // 调用库函数示例
    libraryFunctionExample();

    // 调用用户自定义函数示例
    int result = add(3, 4);
    printf("The sum is: %d\n", result);

    // 调用无返回值函数示例
    printHello();

    // 调用有返回值函数示例
    int maximum = max(10, 20);
    printf("The maximum is: %d\n", maximum);

    // 调用无参数函数示例
    displayMessage();

    // 调用有参数函数示例
    printNumber(42);

    // 调用递归函数示例
    int fact = factorial(5);
    printf("The factorial of 5 is: %d\n", fact);

    return 0;
}

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值