C語言結構體typedef struct詳解

 

1、typedef關鍵字

C 語言提供了 typedef 關鍵字,您可以使用它來爲類型取一個新的名字。下面的實例爲單字節數字定義了一個術語 BYTE

typedef unsigned char BYTE;

在這個類型定義之後,標識符 BYTE 可作爲類型 unsigned char 的縮寫,例如:

BYTE  b1, b2;

typedef相當於給unsigned char起了一個別名。

typedef vs #define

#define 是 C 指令,用於爲各種數據類型定義別名,與 typedef 類似,但是它們有以下幾點不同:

  • typedef 僅限於爲類型定義符號名稱,#define 不僅可以爲類型定義別名,也能爲數值定義別名,比如您可以定義 1 爲 ONE。

  • typedef 是由編譯器執行解釋的,#define 語句是由預編譯器進行處理的。

2、typedef struct

typedef struct的使用方法有很多種,這裏只介紹最標準的一種使用方法:

聲明:

    typedef struct Student
    {
        int a;
    }Stu;

使用:

        Stu xiaoming;

區別:

若struct node {}這樣來定義結構體的話。在申請node 的變量時,需要這樣寫,struct node n; 若用typedef,可以這樣寫,typedef struct node{}NODE; 。在申請變量時就可以這樣寫,NODE n; 區別就在於使用時,是否可以省去struct這個關鍵字。

但是在C++中又會造成區別:

在c++中如果用typedef的話:

struct Student
{
int a;
}stu1;//stu1是一個變量
typedef struct Student2
{
int a;
}stu2;//stu2是一個結構體類型

stu1是一個變量,使用時可以直接訪問stu1.a stu2是一個結構體類型,使用時則必須先 stu2 s2

3、結構體指針

定義:

    typedef struct Student
    {
        int a;
    }Stu,*pStu;

使用:

pStu exam1;
Stu exam2;
exam1 = exam2;
exam2.a = 1;
printf("%d",exam1->a);//輸出爲1

或者:

Stu exam[4];
pStu p;
p = exam;
p +=2;//等價於p = exam[1]

等價於:

    typedef struct Student
    {
        int a;
    }Stu;
    
Stu *exam1;
Stu exam2;
exam1 = exam2;
exam2.a = 1;
printf("%d",exam1->a);//輸出爲1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章