今天做的專案中,看師兄寫的**有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則是巨集定義,發生在預處理階段,也就是編譯之前,它只進行簡單而機械的字串替換,而不進行任何...