回覆列表
  • 1 # 使用者346441264948

    單純對typedef的小總結,如下:

    C語言中一些關於typedef的歸納

    typedef 的一般使用:

    typedef允許你為各種資料型別定義新名字。

    typedef 如何宣告:

    typedef宣告的寫法和普通的宣告基本相同,只是把typedef這個關鍵字出現在宣告的前面。

    例如:

    cptr_to_char a;

    char b = "m";

    a = &b;

    printf("%c\n",*a);//輸出m

    這個宣告把ptr_to_char作為指向字元的指標型別的新名字,宣告a是一個指向字元的指標。

    這樣宣告的好處:使用typedef宣告型別可以減少使宣告變得冗長的危險。

    Attention

    你應該使用typedef而不是#define來建立新的型別名,因為後者無法正確地處理指標型別。

    例如:

    d _ptr_to_char a,b;

    char c = "l";

    a = &c;

    b = "h";

    printf("%c\n",*a);//輸出l

    printf("%c\n",b);//輸出h

    正確地聲明瞭a,但是b卻被宣告為一個字元。在定義更為複雜的型別名時,如果函式指標或指向陣列的指標,使用typedef更為合適。

    typedef 在結構體中的使用

    我們首先來看一個typedef與struct結合使用的例子:

    typedef struct TagNode

    {

    int age;

    char name[20];

    char *address;

    struct TagNode *next;

    }Node,*pNode;

    上面的程式碼實際完成了兩個操作:

    1.定義了一個新的結構體型別

    struct TagNode

    {

    int age;

    char name[20];

    char *address;

    struct TagNode *next;

    }

    其中TagNode稱為"Tag",即標籤,實際上是一個臨時名字,struct關鍵字和TagNode一起,構成了這個結構型別,不論是否有typedef,這個結構都存在。我們可以用struct TagNode來定義變數,但要注意,使用TagNode來定義變數是不對的,因為struct和TagNode合在一起才能表示一個結構型別。

    2.typedef為這個結構起了新的名字,叫Node和*pNode。因此,我們可以直接使用Node來定義該結構體型別變數,使用pNode來定義指向該結構體型別的指標變數。

    例如:

    typedef struct TagNode

    {

    int age;

    char name[20];

    char *address;

    struct TagNode *next;

    }Node,*pNode;

    int main()

    {

    Node lhk = {19,"Robert"};

    pNode p;

    lhk.address = (char*)malloc(80);//表示查詢可用連續80個位元組記憶體的空間賦給address儲存地址。 p = &lhk;//後續引用結構體成員時,以(*p).age形式引用。

    ...

    }

    吐槽一點,回答區不能直接貼上markdown格式文字,很難受。

    歸納於2017.9.9.23.08

  • 中秋節和大豐收的關聯?
  • 你覺得幸福生活是什麼樣的?