1. 程式人生 > >#define和typedef在定義指標型別上的優劣

#define和typedef在定義指標型別上的優劣

#definetypedef在定義指標型別上的優劣

先說下結論:typedef更佳。下面看看程式碼分析:

typedef char *ptr_to_char;
char c = 'A';
ptr_to_char  var = &c;
printf("%c",*var);//A

這句程式碼利用了typedef定義了一個新的型別ptr_to_char,並將其定義為指向字元的指標。在後面可以直接利用此來建立字元指標變數。而#define卻無法很好地駕馭此事:

#define d_ptr_to_char char *
d_ptr_to_char a, b;

int main()
{
    char c = 'A'
; a = &c; b = c; printf("%c",*a);//A printf("%c",b);//A return EXIT_SUCCESS; }

我們知道,#define實際上一個預處理指令。預處理實質上是對程式碼進行文字上的修改,其發生要早於編譯。#define會將它所定義的內容做直接替換處理,因此上面的內容也就變成了:

char *a,b;

實際上定義了一個字元指標a和字元b,並沒達到我們期望的效果。此外,根據《Pointers on C》所述,typedef在處理更復雜型別,如函式指標等,會更勝#define一籌。因此在定義指標型別時,應該使用typedef,而非#define