#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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章