typedef和typedef struct的區別

2021-06-14 03:02:55 字數 1574 閱讀 8215

今天做的專案中,看師兄寫的**有typedef struct,可是自己之前一直都不是特別了解這個是具體代表什麼意思,因為平時很少習慣用這個,一般都是直接就宣告類了,所以上網查了下,現在有所明朗了。

分三塊來講述:

1 首先:

在c中定義乙個結構體型別要用typedef:

typedef struct student

stu;

於是在宣告變數的時候就可:stu stu1;

如果沒有typedef就必須用struct student stu1;來宣告

這裡的stu實際上就是struct student的別名。

另外這裡也可以不寫student(於是也不能struct student stu1;了)

typedef struct

stu;

但在c++裡很簡單,直接

struct student

;於是就定義了結構體型別student,宣告變數時直接student stu2;

****************************************===

2其次:

在c++中如果用typedef的話,又會造成區別:

struct   student   

stu1;//stu1是乙個變數   

typedef   struct   student2   

stu2;//stu2是乙個結構體型別   

使用時可以直接訪問stu1.a

但是stu2則必須先   stu2 s2;

然後               s2.a=10;

****************************************===

3 掌握上面兩條就可以了,不過最後我們**個沒多大關係的問題

如果在c程式中我們寫:

typedef struct  

aaa,bbb,ccc;

這算什麼呢?

我個人觀察編譯器(vc6)的理解,這相當於

typedef struct  

aaa;

typedef aaa bbb;

typedef aaa ccc;

也就是說aaa,bbb,ccc三者都是結構體型別。宣告變數時用任何乙個都可以,在c++中也是如此。但是你要注意的是這個在c++中如果寫掉了typedef關鍵字,那麼aaa,bbb,ccc將是截然不同的三個物件。

tyoedef int *pint;

表示的意思並不是定義乙個指向int型指標,而是表示定義一種新的資料型別,這種型別是指向int型的指標,那麼如果下面有pint a;則這時的a是指向int型指標

同理typedef struct

*pstr;

表示定義一種資料型別,該型別是指向結構體的

所以下面如果有*pstr p;則p是乙個指向結構體的指標

但是很顯然p是懸垂指標,而題中這種情況是不能靜態分配資料的

所以可以動態的分配乙個空間來讓p有所指向

c++可以這麼做:p=new *p

c沒有new語句,那麼可以這麼做:p=(pstr)malloc(sizeof(*p));

原文摘自:

typedef 向前宣告 用typedef宣告型別

定義 可以用typedef宣告乙個新的型別名來代替已有的型別名。用法 typedef int integer 指定用識別符號integer代表int型別 typedef float real 指定用識別符號代表float型別 然後integer a real b 與語句int a float b 是...

結構體和typedef

一 使用結構的乙個優點就是 可以使用簡單的賦值語句在同型別的結構之間複製資訊 first second first.x second.x first.y second.y 二 structlist 注意這個分號不能少 structlistlist1,list2 注意這個分號不能少 structlis...

Typedef和define的區別

typedef和define都可以用來給物件取乙個別名,但是兩者卻有著很大不同。1 首先,二者執行時間不同 關鍵字typedef在編譯階段有效,由於是在編譯階段,因此typedef有型別檢查的功能。define則是巨集定義,發生在預處理階段,也就是編譯之前,它只進行簡單而機械的字串替換,而不進行任何...