日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

玩转C语言之自定义数据类型-typedef

發(fā)布時間:2025/3/13 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 玩转C语言之自定义数据类型-typedef 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

玩轉(zhuǎn)C語言之自定義數(shù)據(jù)類型-typedef

1 引言

引言:在C語言中沒有提供字節(jié)類型,如果在工程中需要使用表示字節(jié)的變量時,該怎么辦呢?

我們知道 1 個字節(jié)占用 8 個二進(jìn)制位空間,解決這個問題的辦法就是找個占用 8 個二進(jìn)制位的內(nèi)存空間的類型即可。

令我們開心的是, char 類型占用的內(nèi)存空間正是 1 個字節(jié),因此可以用 char 類型表示字節(jié)類型。

由于 char 類型表示的數(shù)值范圍是 [-128, 127],1 個字節(jié)表示的范圍是 [0, 255],為了能夠完全代替,我們使用 unsigned char 代表一個字節(jié)類型,unsigned char 表示的數(shù)值范圍正是 [0, 255]。

那么我們?nèi)绻x一個字節(jié)類型的數(shù)據(jù),通過下面的方式即可:

unsigned char byte;

通過上面這種方式,總是感覺怪怪的,因?yàn)椴荒軌蚯逦目闯?byte 是一個字節(jié)類型的數(shù)據(jù)。如果是我們自己閱讀代碼的話,還是能夠明白怎么回事的,但是身處這個開源、分享的領(lǐng)域,那么對于同行來說,他們就很難讀懂我們的代碼。

因此,為了解決這個問題,那么有請這篇文章的主人公閃亮登場——typedef。

2 什么是 typedef

typedef 是 C 語言中的類型命名關(guān)鍵字,通過這個關(guān)鍵字可以對類型賦予新的名字。其語法結(jié)構(gòu)如下:

typedef Type NewTypeName;
  • Type 為已有的數(shù)據(jù)類型
  • Name 為這個數(shù)據(jù)類型的新名字

注意:typedef 并沒有創(chuàng)建新的數(shù)據(jù)類型,而是對已有的數(shù)據(jù)類型賦予新的名字而已!!!

下面通過一個示例,練習(xí)一下 typedef 關(guān)鍵字的使用。

typedef unsigned char byte;int main() {byte b= 128;printf("sizeof(byte) = %d\n", sizeof(byte));printf("b = %u\n", b);return 0; }

3 typedef 的應(yīng)用

對于 typedef 的應(yīng)用,在下面的場合中用的比較多:

  • typedef 在函數(shù)中定義“局部類型名”
  • typedef 簡化類型名(如:unsigned long long)
  • typedef 定義類型名,能夠以統(tǒng)一的方式創(chuàng)建變量(Type var;)

typedef 的應(yīng)用方法

  • 先按定義變量的方法寫出定義體
  • 將變量名換成新類型名
  • 在最前面加上 typedef
  • 然后可以用新類型名定義變量

按定義變量的方式,把變量名換上新類型名,并且在最前面加 typedef,即聲明了新類型名代表原來的類型。

(1)命名一個新的類型名代表結(jié)構(gòu)體類型

typedef struct {int month;int day;int year; } Date;

上面聲明了一個新類型名 Date,代表一個結(jié)構(gòu)體類型,可以使用新的類型名定義變量,如:

  • Date birthday;
  • Date *p;

(2)命名一個新的類型名代表數(shù)組類型

typedef int Num[100]; Num a;

(3)命名一個新的類型名代表指針類型

typedef char *String; String p, s[10]; // p 為字符指針變量,s 為字符指針數(shù)組

(4)命名一個新的類型名代表指向函數(shù)的指針類型

typedef int (*P)(); P p1, p2;

下面通過兩個例子,加深一下 typedef 的應(yīng)用:

demo one

#include <stdio.h>typedef unsigned char byte;// 在函數(shù)的內(nèi)部創(chuàng)建類型的新名字 // 這種情況下是具有局部的特性,出了這個函數(shù)就沒有作用了 void func() {typedef byte uint8;uint8 var = 200;printf("sizeof(uint8) = %d\n", sizeof(uint8));printf("var = %u\n", var); }int main() {byte b = 128;func();printf("sizeof(byte) = %d\n", sizeof(byte));printf("b = %u\n", b);return 0; }

demo two

#include <stdio.h>// 為 float[5] 定義新的名字為 fArray5 typedef float(fArray5)[5]; // 為 int(int, int) 定義新的名字為 iFuncII typedef int(iFuncII)(int, int);float array[5] = {0.1, 0.2, 0.3, 0.4, 0.5}; int add(int a, int b) {return a+b; }int main() {// 定義一個名為 pa、元素類型為 float、元素個數(shù)為 5、值為數(shù)組 array 的地址的數(shù)組指針fArray* pa = &array;// 定義一個名為 pf 的指針iFuncII* pf = add;int i = 0;for(i=0; i<5; i++){printf("%f\n", (*pa)[i]);}printf("%d\n", pf(i, i+1));return 0; }

4 typedef 用法進(jìn)階

(1)typedef 與 #define 的區(qū)別

  • #define 是在預(yù)編譯時處理的,只能作簡單的字符串替換
  • typedef 是在編譯階段處理的

(2)當(dāng)不同源文件中用到同一類型時,常用 typedef 聲明一些數(shù)據(jù)類型,可以把所有的 typedef 名稱聲明放在一個頭文件中,然后在需要的文件中通過 #include 指令將其包含到文件中

(3)使用 typedef 有利于程序的通用與移植

總結(jié)

以上是生活随笔為你收集整理的玩转C语言之自定义数据类型-typedef的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。