C語言中的typedef問題

2021-06-27 09:50:12 字數 1540 閱讀 6260

1. 基本解釋

typedef為c語言的關鍵字,作用是為一種資料型別定義乙個新名字。這裡的資料型別包括內部資料類

型(int,char等)和自定義的資料型別(struct等)。

在程式設計中使用typedef目的一般有兩個,乙個是給變數乙個易記且意義明確的新名字,另乙個是簡化一

些比較複雜的型別宣告。

至於typedef有什麼微妙之處,請你接著看下面對幾個問題的具體闡述。

2. typedef & 結構的問題

當用下面的**定義乙個結構時,編譯器報了乙個錯誤,為什麼呢?莫非c語言不允許在結構中包含

指向它自己的指標嗎?請你先猜想一下,然後看下文說明:

typedef struct tagnode

*pnode; 

答案與分析:

1、typedef的最簡單使用

typedef long byte_4;

給已知資料型別long起個新名字,叫byte_4。

2、 typedef與結構結合使用

typedef struct tagmystruct

mystruct;

這語句實際上完成兩個操作:

1) 定義乙個新的結構型別

struct tagmystruct

; 分析:tagmystruct稱為「tag」,即「標籤」,實際上是乙個臨時名字,struct 關鍵字和

tagmystruct一起,構成了這個結構型別,不論是否有typedef,這個結構都存在。

我們可以用struct tagmystruct varname來定義變數,但要注意,使用tagmystruct varname來定義

變數是不對的,因為struct 和tagmystruct合在一起才能表示乙個結構型別。

2) typedef為這個新的結構起了乙個名字,叫mystruct。

typedef struct tagmystruct mystruct;

因此,mystruct實際上相當於struct tagmystruct,我們可以使用mystruct varname來定義變數。

答案與分析

c語言當然允許在結構中包含指向它自己的指標,我們可以在建立鍊錶等資料結構的實現上看到無數

這樣的例子,上述**的根本問題在於typedef的應用。

根據我們上面的闡述可以知道:新結構建立的過程中遇到了pnext域的宣告,型別是pnode,要知道

pnode表示的是型別的新名字,那麼在型別本身還沒有建立完成的時候,這個型別的新名字也還不存在,

也就是說這個時候編譯器根本不認識pnode。

解決這個問題的方法有多種:

1)、typedef struct tagnode

*pnode;

2)、typedef struct tagnode *pnode;

struct tagnode

; 注意:在這個例子中,你用typedef給乙個還未完全宣告的型別起新名字。c語言編譯器支援這種做法

3)、規範做法:

struct tagnode

;typedef struct tagnode *pnode;

C語言中的typedef

typedef是用於定義新的型別名,在程式設計中可以用typedef來定義新的型別名來代替已有的型別名 格式 typedef 已有型別名 新的型別名 通俗點說,就是為已有的型別取別名,例如 老鼠?又叫耗子?老鼠也是它,耗子也是他 但不能取新的型別名,也就是說不能憑空造出來乙個型別,必須是在已有的型別...

C語言中的typedef

typedef 的講解與應用例項 用法一 型別的重定義 typedef unsigned char u8 typedef char pchar 這裡的第一句是給unsigned char型別重新起個別名,叫 u8 應用時看到u8 定義的變數,就相當於unsigned char 型別,兩者是完全等價的...

C語言中typedef用法

c語言中typedef用法 1.基本解釋 typedef為c語言的關鍵字,作用是為一種資料型別定義乙個新名字。這裡的資料型別包括內部資料型別 int,char等 和自定義的資料型別 struct等 在程式設計中使用typedef目的一般有兩個,乙個是給變數乙個易記且意義明確的新名字,另乙個是簡化一些...