typedef為指標定義別名

2022-09-09 10:54:11 字數 1650 閱讀 8272

對指標和函式指標定義別名涉及到優先順序,檢視《c語言宣告的優先順序》那篇

1、c語言typedef的用法詳解 (biancheng.net)

typedef char char20[20];    //

char20是型別char [20]的別名。它是乙個長度為 20 的陣列型別

char20 a1, a2, a3, a4;     //

char a1[20], a2[20], a3[20], a4[20]

#include typedef char (*ptr_to_addr)[30];             //

ptr_to_arr是二位陣列char *[30]的別名,是二維陣列指標型別

char str[3][30] =;

intmain()

}

執行結果:

hello  world  !
2、typedef

void (* fun)(void)

fun是乙個變數,它是個指標,指向乙個函式,函式的引數和返回值都是空,fun是乙個指向引數和返回值都為空的函式指標。

type void (* fun)(void)是函式指標的型別定義,代表了一種新的型別,宣告一種void (*)(void)型別的函式指標fun。

typedef為現有型別建立乙個新的名字,typedef能隱藏笨拙的語法構造以及平台一些相關的資料型別,增強**可維護性、可移植性、可讀性

#include

typedef void (*ptr_to_fun)(int, int); //ptr_to_fun是乙個函式指標

void max(int a, int b)

int main()

結果:

20

3、typedef 和 #define 的區別

typedef 是在編譯過程中被解析的,而#define是在編譯之前的預處理階段處理的;#define只是對所定義的別名的簡單替換,而typedef可以做到#define能做到的所有事情,而且可以做得更好

(1)可以使用其他型別說明符對巨集型別名進行擴充套件,但對 typedef 所定義的型別名卻不能這樣做

#define interge intunsigned interge n;  

//沒問題

typedef

intinterge;

unsigned interge n;

//錯誤,不能在 interge 前面新增 unsigned

(2)在連續定義幾個變數的時候,typedef 能夠保證定義的所有變數均為同一型別,而 #define 則無法保證

#define ptr_int int *ptr_int p1, p2;     

//int *p1, p2;

typedef int *ptr_int

ptr_int p1, p2;

//int *p1, *p2;

typedef定義別名

問題 typedef int arr5 5 typedef arr5 p arr5 typedef p arr5 arrp10 10 arr5 togs togs是具有5個元素的int陣列?為什麼?p arr5 p2 p2是乙個指標,指向具有5個元素的int陣列 arrp10 ap ap是具有10個...

typedef 定義函式指標

typedef 返回型別 新型別 參數列 typedef char ptrfun int ptrfun pfun char glfun int a void main typedef的功能是定義新的型別。第一句就是定義了一種ptrfun的型別,並定義這種型別為指向某種函式的指標,這種函式以乙個int...

typedef 和 define定義別名的區別

typedef與 define 的區別 一 typedef的用法 typedef常用來定義乙個識別符號及關鍵字的別名,它是語言編譯過程的一部分,但它並不實際分配記憶體空間,例項像 typedef int int typedef int array 10 typedef int pint typede...