C語言中typedef用法總結,看完就能像編程老手一樣熟練運用

2020-12-11 C語言知識傳播者
請看下文

C語言中typedef關鍵字應用比較常見,許多C語言初學者對它的用法不甚了解。事實上,我們可以用typedef來定義自己習慣使用的數據類型名稱,可以替代自己所熟悉的基本類型、數組類型、指針類型以及自己定義的結構體類型、共用體類型、枚舉類型等。一旦我們在程序中定義了自己的數據類型名稱,我們就可以像使用int、float和double等基本數據類型一樣來使用它。實際使用中,typedef有以下幾種主要形式。

1、 給基本數據類型定義新名字

基本數據類型的新名字定義通常有兩個方面的作用:

1) 使數據類型名稱簡潔

新類型名字定義代碼如下所示:

typedef unsigned int UINT;

新類型名UINT定義之後就可以使用它來定義變量,定義代碼如下:

UINT a,b,c;

2) 代碼中的類型與平臺無關

由於C語言代碼有較強的移植性,通過代碼移植,可以使其運行在不同的硬體平臺上,使用typedef就可以定義與平臺無關的類型。假如用戶的程序代碼用到了浮點類型,不同平臺支持的最高精度不同,這樣用戶在編程時可以用typedef直接定義一個名為REAL的浮點類型,代碼在不同平臺運行時僅需修改REAL的定義即可。

如某個平臺最高支持long double,那麼可以將REAL定義如下:

typedef long double REAL;

如果另一個平臺最高僅支持float,那麼可以將上述定義修改成如下形式:

typedef float REAL;

2、 給數組類型定義新名字

與給基本數據類型定義新名字類似,給數組類型可以定義新名字,定義形式如下:

typedef int ARR_T[50];

這裡ARR_T就是一個整型數組類型名,當用戶需要定義包含50個元素的整型數組時,可以這樣定義:

ARR_T myIntArr;

這裡myIntArr就是一個包含了50個元素的數組名。

3、 給指針類型定義新名字

對於普通的指針類型,定義類似於上述兩種情況,定義代碼如下:

typedef int * PINT;

PINT pin1, pin2;

這裡PINT是一個指向整型變量的指針類型,利用它定義了兩個指向整型變量的指針pin1和pin2。

對於複雜一點的指針類型,就更能體現出typedef的優勢。請看下面的聲明代碼示例:

int * (*s[10])(int *, char *(*)());

對於這個複雜的聲明,可以通過typedef定義一個新的簡單的別名。過程如下:在原來的聲明裡逐步用別名替換一部分複雜聲明,如此循環,把帶變量名(這裡為s)的部分留到最後替換,最終得到的就是上述聲明的最簡化版,具體定義如下:

typedef char *(*pParam)();

typedef int *(*PFUN)(int *, pParam);

PFUN s[10];

4、 給自定義數據類型定義新名字

假如用戶程序用到了許多自定義數據類型,如結構體類型、共用體類型、枚舉類型等。為了使自定義數據類型簡潔,可以在其定義的同時時使用typedef給其重新定義一個較為簡潔、直觀的名字。以結構體為例,定義代碼形式如下:

typedef struct tagNODE

{

int data;

struct tagNODE *next;

}NODE, *PNODE;

這裡在定義結構體數據類型時,利用typedef定義了兩個類型,NODE和PNODE分別為普通變量類型和指向結構的指針類型。

注意,結構體內部一定要用原結構體類型名(struct tagNODE)定義指針next,千萬不可以用PNODE或NODE*定義,這是因為此時結構體類型還沒有定義完成,不可以使用PNODE和NODE。

定義完之後,就可以使用新類型名定義變量了,簡化了定義,使用形式如下:

NODE nd1, nd2, nd3;

PNODE pnd;

nd1, nd2, nd3為普通結構體變量,pnd為指向結構體變量的指針。

關於typedef典型用法今天就總結到這,如果大家有任何疑問請留言探討。我是「C語言知識傳播者」,我會用心總結C語言知識的點點滴滴,你的關注是我持續創作的動力,請關注我,收藏本文、轉發並點讚,希望得到你們的持續關注,謝謝!

相關焦點

  • C語言中typedef與define的這些區別值得關注
    請看下文C語言中typedef與define有些功能有點類似,比如它們均可以給一個對象取個別名。typedef用來定義自己習慣使用的數據類型名稱,可以替代自己所熟悉的基本類型、數組類型、指針類型以及自己定義的結構體類型、共用體類型、枚舉類型等。一旦我們在程序中使用typedef定義了自己的數據類型名稱,我們就可以像使用int、float和double等基本數據類型一樣來使用它。
  • 關於typedef的用法總結
    typedef與#define有些相似,但更多的是不同,特別是在一些複雜的用法上,就完全不同了,看了網上一些C/C++的學習者的博客,其中有一篇關於typedef的總結還是很不錯,由於總結的很好,我就不加修改的引用過來了,以下是引用的內容(紅色部分是我自己寫的內容)。  用途一:  定義一種類型的別名,而不只是簡單的宏替換。可以用作同時聲明指針型的多個對象。
  • C語言#define和typedef的用法區別,以及陷阱
    關注+星標公眾號,不錯過精彩內容編排 | strongerHuang微信公眾號 | 嵌入式專欄在C語言編程中,typedef 和 #define是最常用語句,可能很多工作過幾年的工程師都沒有去深究過它們的一些用法和區別。
  • C語言typedef VS define,孰優孰劣?
    typedefC 語言提供了 typedef關鍵字,您可以使用它來為類型取一個新的名字。,但您也可以使用小寫字母,如下:typedef unsigned char byte;您也可以使用 typedef 來為用戶自定義的數據類型取一個新的名字。
  • C語言中的變量存儲類型static老手都這樣用
    請看正文C語言中的變量有哪些存儲類型static老手都這樣用。1、 先來回顧C語言變量C語言中變量值的存儲位置有兩類:CPU的寄存器和內存。下面我們直接講乾貨,static關鍵字用法。2、 Static關鍵字用法C語言中,無論是變量還是函數都可以用static關鍵字來修飾。具體用法我們分別來看。
  • 總結嵌入式開發中的C語言知識點
    C語言只規定了每種基本數據類型的最小取值範圍,因此在不同晶片平臺上相同類型可能佔用不同長度的存儲空間,這就需要在代碼實現時考慮後續移植的兼容性,而C語言提供的typedef就是用於處理這種情況的關鍵字,在大部分支持跨平臺的軟體項目中被採用,典型的如下:typedef unsigned char uint8_t;typedef unsigned short
  • typedef和#define的用法、區別以及陷阱!
    在C語言編程中,typedef和#define是最常用語句,可能很多工作過兩三年的工程師都沒有去深究過它們的一些用法和區別。
  • typedef和#define的用法、區別,以及陷阱
    素材來源:網絡編輯整理:strongerHuang在C語言編程中,typedef 和 #define是最常用語句,可能很多工作過兩三年的工程師都沒有去深究過它們的一些用法和區別
  • C語言switch語句用法總結
    請看下文C語言中選擇結構分為if語句和switch語句兩種,兩種語句均可以依據條件不同而選擇執行不同的語句塊,但switch語句更多地應用於多分支結構。本文將總結switch語句基本用法及使用技巧,希望能給大家提供參考。1、 switch語句基本用法C語言中,switch語句是一種多分支選擇語句,在實際應用中,要在多種情況中選擇一種情況,執行某一部分語句。
  • C語言編程核心要點
    原文標題C語言編程核心要點,男人看了沉默,女人看了本文轉載自【微信公眾號:碼磚雜役,ID:whatis9527want】引言筆者有十餘年的C++開發經驗,相比而言,我的C經驗只有一兩年,C比較簡單,簡單到《The C Programming Language》(C程序設計語言)只有區區的200多頁,相比上千頁的C++大部頭,不得不說真的很人性化了
  • C語言結構體常見寫法及用法
    關注+星標公眾號,不錯過精彩內容作者
  • C語言之類型定義(typedef)
    我們知道C語言定義數據類型的時候只定義了它們之間的關係,但卻沒有具體定義它們的大小。比如 short 的長度只規定了不大於 int,long的長度不小於 int,int是多大也沒確定,所以你會看到51單片機的int大小為兩個字節,而在stm32中的長度為 4 字節。
  • typedef用法 與#define
    對於typedef的用法,一般如下:原始類型一般緊緊臨著typedef,最右邊是聲明的新的類型名字(其實就是原始類型的一種表示)。例如 typedef int INT;這裡聲明了一個與int同意的類型INT。如此以來int a;與INT a;並沒什麼本質的區別。 typedef還可以掩蓋複合類型,例如指針、數組、函數指針。
  • 一步步分析:C語言如何面向對象編程
    ,C/C++語言是使用最普及的,在C++11版本之前,它們的語法是比較相似的,只不過C++提供了面向對象的編程方式。雖然C++語言是從C語言發展而來的,但是今天的C++已經不是當年的C語言的擴展了,從2011版本開始,更像是一門全新的語言。
  • 為什麼很多人編程喜歡用typedef?如何避免濫用?
    C語言中已經存在的一個類型起一個新名字。2.2 增加代碼的可移植性C語言的int類型,我們知道,在不同的編譯器和平臺下,所分配的存儲字長不一樣:可能是2個字節,可能是4個字節,也有可能是8個字節。如果我們在代碼中想定義一個固定長度的數據類型,此時使用int,在不同的平臺環境下運行可能會出現問題。為了應付各種不同「脾氣」的編譯器,最好的辦法就是使用自定義數據類型,而不是使用C語言的內置類型。
  • C/C+編程筆記:Windows編程入門知識
    引言: 學習C語言很久了,是不是一直在跟黑乎乎的屏幕打交道,像QQ、360、VC6.0這樣的軟體都是帶界面的,怎麼做到的呢? 什麼是windos編程? 在C語言中,使用fopen()函數可以打開一個文件,感覺非常簡單。
  • c語言之共用體union、枚舉、大小端模式
    上一個專題我們詳細的分享了c語言裡面的結構體用法,讀者在看這些用法的時候,可以一邊看一邊試驗,掌握了這些基本用法就完全夠用了,當然在以後的工作中
  • 快速上手系列-C語言之typedef
    之前有提到過typedef,它的作用就是給已有的類型重新定義一個名字。比如當我們看別人的代碼的時候,是否注意到這樣定義變量:INT16 a;或者INT32 a;很明顯就能看出來這兩個類型都是整型的,不同的是INT16是16位,INT32是32位的整型。
  • C語言之精華總結
    注8:這裡我沒有使用函數實參這個大陸術語,而是運用了臺灣術語,它們都是argument這個英文術語的翻譯,但在很多地方中文的實參用的並不恰當,非常的勉強,而引數表示被引用的數,很形象,也很好理解。很快你就可以像我一樣適應引數而不是實參。 dereferance,也就是*運算符操作。我也用的是提領,而不是解引用。 我認為你一定智勇雙全:既有寬容的智慧,也有面對新事物的勇氣!
  • struct和typedef struct
    基本解釋typedef為C語言的關鍵字,作用是為一種數據類型定義一個新名字。這裡的數據類型包括內部數據類型(int,char等)和自定義的數據類型(struct等)。在編程中使用typedef目的一般有兩個,一個是給變量一個易記且意義明確的新名字,另一個是簡化一些比較複雜的類型聲明。至於typedef有什麼微妙之處,請你接著看下面對幾個問題的具體闡述。