在C語言的指針章節中,我們講到函數指針模塊
在函數指針中,有一個重要的關鍵字:typedef
typedef關鍵字
- 作用
- 基本語法
- 重難點:對數組指針與函數指針的重命名
- 數組指針重命名
- 一維數組指針重命名
- 遍歷二維數組
- 函數指針重命名
作用
typedef是用來類型重命名的,將復雜的類型簡單化
重要提示:
typedef
并不創建新的數據類型,它只是給現有的類型起了一個“外號”。編譯器會把它和原始類型視為完全相同的類型。
基本語法
typedef existing_type new_type_name;
-
existing_type
:任何已有的基本數據類型(如int
,float
)或復合數據類型(如結構體、枚舉、指針、數組)。 -
new_type_name
:你為這個類型定義的新的名稱。
typedef unsigned int UINT;
typedef char BYTE;UINT count = 10; // 等價于 unsigned int count = 10;
BYTE letter = 'A'; // 等價于 char letter = 'A';
你的程序將來需要將
UINT
從unsigned int
改為unsigned long
,你只需要修改typedef
這一行代碼即可,而不需要修改所有聲明變量的地方。
重難點:對數組指針與函數指針的重命名
數組指針重命名
比如我們有數組指針類型
int(*)[5]
,需要重命名為parr_t
,那可以這樣寫:typedef int(*parr_t)[5]; //新的類型名必須在*的右邊
一維數組指針重命名
#include <stdio.h>int main() {int arr[5] = {10, 20, 30, 40, 50};// 為"指向包含5個int的數組的指針"創建別名typedef int (*IntArray5Ptr)[5];// 使用該類型聲明指針IntArray5Ptr ptr = &arr; // 注意:這里取整個數組的地址// 通過指針訪問數組元素printf("第一個元素: %d\n", (*ptr)[0]);printf("第三個元素: %d\n", (*ptr)[2]);// 也可以這樣訪問printf("最后一個元素: %d\n", (*ptr)[4]);return 0;
}
遍歷二維數組
#include <stdio.h>int main() {int matrix[2][3] = {{1, 2, 3},{4, 5, 6}};// 為"指向包含3個int的數組的指針"創建別名typedef int (*RowPtr)[3];// 使用該類型聲明指針,指向第一行RowPtr ptr = matrix;printf("二維數組內容:\n");for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {printf("%d ", (*ptr)[j]); // 訪問當前行的元素}printf("\n");ptr++; // 移動到下一行}return 0;
}
函數指針重命名
基本語法:
typedef 返回類型 (*新類型名)(參數列表);
#include <stdio.h>// 定義一個函數指針類型
typedef int (*MathFunc)(int, int);// 實際函數
int add(int a, int b) {return a + b;
}int subtract(int a, int b) {return a - b;
}int main() {// 使用類型別名聲明函數指針MathFunc func = add;printf("加法結果: %d\n", func(5, 3));func = subtract;printf("減法結果: %d\n", func(5, 3));return 0;
}