day3 函数的定义和调用,练习编写简单的程序(记录1)

  • Post category:C++

一、函数的定义

可以分为以下两种:

1、函数声明和函数定义分离

这种方法将函数声明和函数定义分开,通常在头文件中先声明函数原型,然后在源文件中实现函数定义。

例如,头文件 example.h 中声明了一个函数 add:

#ifndef EXAMPLE_H
#define EXAMPLE_H

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

#endif //EXAMPLE_H 

然后在源文件 example.c 中实现函数定义:

#include "example.h"
int add(int a, int b) {  // 实现函数定义
    return a + b;
}

这种方法可以使得代码更加模块化,便于维护和重用。

函数声明和函数定义结合在一起

这种方法将函数声明和函数定义结合在一起,通常在源文件中直接实现函数定义。

int sub(int a, int b) {  // 函数声明和定义结合在一起
    return a - b;
}

这种方法比较简单,但是当函数需要在多个源文件中使用时,需要在每个源文件中都复制一份函数定义。

总之,不管是哪一种方法,函数的定义都包含函数名、参数列表和函数体三部分,通过定义函数来实现特定的功能。在编写函数时,需要考虑函数的输入、输出以及具体实现逻辑,保证程序的正确性和效率。

二、函数的调用

可以分为以下两种方式:

普通函数调用

普通函数调用是指通过函数名加括号的方式来调用函数,例如:

int a = 10, b = 5;
int result = add(a, b);  // 调用 add 函数计算 a + b 的值,并将结果赋值给变量 result

在这个例子中,我们使用 add(a, b) 的方式来调用 add 函数,并将计算结果赋值给变量 result。

通过函数指针调用函数(法1)

另一种方式是通过函数指针来调用函数。函数指针是一个指向函数的指针变量,可以存储函数的入口地址。

例如,假设有以下函数:

int add(int a, int b) {
    return a + b;
}

我们可以定义一个函数指针变量 pfunc,并将其赋值为 add 函数的入口地址:

//int (*pfunc)(int, int);  // 定义函数指针变量
//int* pfunc(int, int)     //我的理解定义一个函数指针
pfunc = add;  // 将函数指针赋值为 add 函数的入口地址

然后,我们可以通过 (*pfunc)(a, b) 的方式来调用 add 函数,例如:

int a = 10, b = 5;
//我的理解的通过*pfunc解引用
int result = (*pfunc)(a, b);  // 通过函数指针调用 add 函数计算 a + b 的值,并将结果赋值给变量 result

在这个例子中,我们首先定义了一个函数指针变量 pfunc,然后将其赋值为 add 函数的入口地址。接着,我们使用 (*pfunc)(a, b) 的方式来调用 add 函数,并将计算结果赋值给变量 result。

通过函数指针调用函数(法2)

通过函数指针调用函数的另一种写法是使用 typedef 关键字来定义函数指针类型。具体步骤如下:

使用 typedef 定义函数指针类型。

typedef int (*pfunc)(int, int);

上述语句定义了一个名为 pfunc 的函数指针类型,它表示一个接收两个 int 类型参数并返回 int 类型值的函数。

声明函数指针变量并赋值。

pfunc ptr = add;

这行代码声明了一个名为 ptr 的函数指针变量,并将其赋值为 add 函数的地址。

通过函数指针调用函数。

int result = ptr(a, b);

这行代码通过函数指针 ptr 调用 add 函数,并将计算结果赋值给 result 变量。

完整的代码示例如下:

#include <iostream>
using namespace std;

int add(int a, int b) {
    return a + b;
}

typedef int (*pfunc)(int, int);

int main() {
    int a = 10, b = 5;
    pfunc ptr = add;
    int result = ptr(a, b);
    cout << result << endl;  // 输出 15
    return 0;
}

通过使用 typedef 关键字可以定义函数指针类型,从而使得函数指针的声明和使用更加方便。

总之,不管是哪一种方式,都可以实现对函数的调用。但是需要注意的是,当函数的参数列表较长时,使用函数指针来调用函数可能会比较繁琐,此时应该使用普通函数调用来简化代码。