一、函數的定義 可以分為以下兩種: 1、函數聲明和函數定義分離 這種方法將函數聲明和函數定義分開,通常在頭文件中先聲明函數原型,然後在源文件中實現函數定義。 例如,頭文件 example.h 中聲明瞭一個函數 add: #ifndef EXAMPLE_H #define EXAMPLE_H int ...
一、函數的定義
可以分為以下兩種:
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 關鍵字可以定義函數指針類型,從而使得函數指針的聲明和使用更加方便。
總之,不管是哪一種方式,都可以實現對函數的調用。但是需要註意的是,當函數的參數列表較長時,使用函數指針來調用函數可能會比較繁瑣,此時應該使用普通函數調用來簡化代碼。