在c語言中,經常有如下的用法:
typedef struct tag
mytype, *myptr;
一旦通過如上定以後,就可以用mytype來定義struct tag結構了。
以前我使用typedef的時候,是按照其字面意思理解的,所以進入了乙個誤區。比如說我想定義myint為int型別,我用的**如下:
typedef myint int;
我把上述**理解為:定義myint型別為int。一切好像都是順其自然的事情,但編譯的時候才知道錯誤。
其實,在c語言中宣告變數的時候,有個儲存型別指示符(storage-class-specifier),它包括我們熟悉的
extern
static
auto
register
在不指定儲存型別指示符的時候,編譯器會根據約定自動取預設值。另外,儲存型別指示符的位置也是任意的(但要求在變數名和指標*之前),也就是說以下幾行**是等價的:
static const int i;
const static int i;
int const static i;
const int static i;
根據c語言規範,在進行句法分析的時候,typedef和儲存型別指示符是等價的!所以,我們把上述使用static的地方替換為typedef:
typedef const int i;
const typedef int i;
int const typedef i;
const int typedef i;
上述**的語義是:將i定義為乙個型別名,其等價的型別為const int。以後如果我們有i a;**,就等價於const int a;
對於有指標的地方也是一樣的,比如:
int const typedef *t;
那麼**
t p;
就相當於
int const *p;
另外,typedef不能和static等儲存型別指示符同時使用,因為每個變數只能有一種儲存型別,所以**:
typedef static int i;
是非法的。
C語言中typedef用法
c語言中typedef用法 1.基本解釋 typedef為c語言的關鍵字,作用是為一種資料型別定義乙個新名字。這裡的資料型別包括內部資料型別 int,char等 和自定義的資料型別 struct等 在程式設計中使用typedef目的一般有兩個,乙個是給變數乙個易記且意義明確的新名字,另乙個是簡化一些...
C語言中typedef的用法
本文是參考譚浩強的 c程式設計 第二版一書所寫,總感覺有些重點的地方書中沒有提出來,等本人遇到其他重要用法的時候再來補充,或者大家幫我提出來,以便共同學習。1 用typedef宣告新的型別名來代替已有的型別名 cpp view plain copy typedefintinteger typedef...
c語言中typedef的用法
typedef struct student linklist linklist head 以上定義了乙個新的結構體student,並將結構體起了乙個新的別名linklist 結構體中不用typedef也是可以的,定義變數時需要加上struct student struct student stru...