最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言中typedef的用法以及#define區(qū)別詳解

 更新時(shí)間:2021年07月06日 11:33:54   作者:一只不出息的程序員  
這篇文章主要給大家介紹了關(guān)于C語言中typedef用法以及#define區(qū)別的相關(guān)資料,typedef 是用來定義一種類型的新別名的,它不同于宏(#define),不是簡單的字符串替換。而#define只是簡單的字符串替換(原地?cái)U(kuò)展),需要的朋友可以參考下

1、簡潔定義

C語言允許為一個(gè)數(shù)據(jù)類型起一個(gè)新的別名,就像給人起“綽號(hào)”一樣。而編程中起別名,是為了編程人員編程方便,例如:

定義如下結(jié)構(gòu)體

struct stu
{
	int ID;
	char name[20];
	float score[3];
	char *data;
};

要想定義一個(gè)結(jié)構(gòu)體變量就得這樣寫:

struct stu Marry;//Marry是定義的新結(jié)構(gòu)體學(xué)生

這個(gè)地方可以用我們今天的主題語法:typedef,來減少定義時(shí)需要的字符,來完成目的,如下:

typedef struct stu
{
	int ID;
	char name[20];
	float score[3];
	char *data;
}STU;
//定義一個(gè)Marry學(xué)生結(jié)構(gòu)體
STU Marry;

可以看到非常簡單的定義字符,完成結(jié)構(gòu)體定義,另外typedef也可以用于已有類型,為已有類型起一個(gè)新的名字。

2、為已有類型起別名

typedef 的用法一般為:

typedef oldName newName;

例如如下,為int起名 Integer:

typedef int MY_int;
MY_int a, b;
a = 1;
b = 2;
/*這里  MY_int a, b ;等同于 int a, b; */

這里 MY_int a, b ; 等同于 int a, b;

typedef 還可以給數(shù)組、指針、結(jié)構(gòu)體等類型定義別名。先來看一個(gè)給數(shù)組類型定義別名的例子:

為字符數(shù)組起別名

typedef char ARRAY20[20];

表示 ARRAY20 是類型char [20]的別名。它是一個(gè)長度為 20 的數(shù)組類型。接著可以用 ARRAY20 定義數(shù)組:

ARRAY20 a1, a2, s1, s2;

結(jié)果如下,可以看到ARRAY20 定義的數(shù)組長度是20個(gè)字符。

因此 ARRAY20 a1, a2, s1, s2; 等價(jià)于 char a1[20], a2[20], s1[20], s2[20]; ,即數(shù)組也是有類型的,例如char a1[20];定義了一個(gè)數(shù)組 a1,它的類型就是 char [20]。

為指針起別名

為指針類型定義別名,例如如下:

typedef int (*ptr_to_arr)[4];

表示 ptr_to_arr是類型int * [4]的別名,它是一個(gè)二維數(shù)組指針類型。接著可以使用 ptr_to_arr定義二維數(shù)組指針:

ptr_to_arr p1, p2;

這代表p1, p2都是二維數(shù)組指針,同樣也可以為函數(shù)指針類型定義別名:

typedef int (*ptr_to_func)(int, int);
ptr_to_func pfunc;

如下表示為指針類型和函數(shù)類型起別名:

#include <stdio.h>

typedef char (*ptr_to_arr )[30];
typedef int (*ptr_to_func )(int, int);

int max(int a, int b){
    return a>b ? a : b;
}

char str[3][30] = {
    "Happy New Year",
    "Good Good Study",
    "Day Day up"
};

int main(){
    ptr_to_arr parr = str;//parr 代表一個(gè)二維數(shù)組指針,指向str這個(gè)二維數(shù)組對應(yīng)元素
    ptr_to_func  pfunc = max;//pfunc代表一個(gè)函數(shù)指針,指向max函數(shù)
    int i;
   
    printf("max: %d\n", (*pfunc)(10, 20));
    for(i=0; i<3; i++){
        printf("str[%d]: %s\n", i, *(parr+i));
    }

    return 0;
}

結(jié)果如下:

需要強(qiáng)調(diào)的是,typedef 是賦予現(xiàn)有類型一個(gè)新的名字,而不是創(chuàng)建新的類型。為了“見名知意”,請盡量使用含義明確的標(biāo)識(shí)符,并且盡量大寫。

3、typedef 和 #define 的區(qū)別

typedef 在表現(xiàn)上有時(shí)候類似于 #define,但它和宏替換之間存在一個(gè)關(guān)鍵性的區(qū)別。正確思考這個(gè)問題的方法就是把 typedef 看成一種徹底的“封裝”類型,聲明之后不能再往里面增加別的東西。例如如下情況:

1)能否使用其他類型說明符對宏類型名進(jìn)行擴(kuò)展

用unsigned 配合 #define定義的變量,可以使用:

#define MY_int int
unsigned MY_int n;  //沒問題

但是用unsigned 配合 typedef 定義的變量,則不可以使用:

typedef int MY_int ;
unsigned MY_int n;  //錯(cuò)誤,不能在 MY_int 前面添加 unsigned

表明了typedef 的完整性。

2)在連續(xù)定義幾個(gè)變量的時(shí)候,typedef 能夠保證定義的所有變量均為同一類型,而 #define 則無法保證。例如:

#define My_int int *
My_int p1, p2;

//如果用宏替換則變?yōu)椋?/p>

int *p1, p2;

這樣會(huì)使, p1、p2 成為不同的類型,p1為指向int類型的指針,p2為int類型數(shù)據(jù)。

對于typedef定義的別名,不存在上述的情況,例如:

typedef int * PTR_INT
PTR_INT p1, p2;

p1、p2 類型相同,它們都是指向 int 類型的指針。

總結(jié)

到此這篇關(guān)于C語言中typedef的用法以及#define區(qū)別的文章就介紹到這了,更多相關(guān)C語言typedef及#define區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實(shí)現(xiàn)窗口抖動(dòng)

    C語言實(shí)現(xiàn)窗口抖動(dòng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)窗口抖動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • c語言conio.h基本知識(shí)點(diǎn)總結(jié)

    c語言conio.h基本知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家分享的是關(guān)于c語言conio.h是什么意思的相關(guān)知識(shí)點(diǎn),需要的朋友們可以學(xué)習(xí)參考下。
    2020-02-02
  • C++中多線程間共享數(shù)據(jù)詳解

    C++中多線程間共享數(shù)據(jù)詳解

    這篇文章主要為大家詳細(xì)介紹了C++中多線程間共享數(shù)據(jù)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • C語言詳解UDP通信的實(shí)現(xiàn)

    C語言詳解UDP通信的實(shí)現(xiàn)

    UDP協(xié)議是用戶數(shù)據(jù)報(bào)協(xié)議,面向無連接的、不穩(wěn)定、不可靠、不安全的數(shù)據(jù)報(bào)傳遞---更像是是收發(fā)短信;UDP傳輸不需要建立連接,傳輸效率更高,在穩(wěn)定的局域網(wǎng)內(nèi)環(huán)境相對可靠;UDP天然支持多客戶端
    2022-05-05
  • C++的STL中accumulate函數(shù)的使用方法

    C++的STL中accumulate函數(shù)的使用方法

    這篇文章主要介紹了C++的STL中accumulate的使用方法,accumulate作用是累加求和即自定義類型數(shù)據(jù)處理,下文具體的操作方法需要的小伙伴可以參考一下
    2022-03-03
  • C++/Php/Python/Shell 程序按行讀取文件或者控制臺(tái)的實(shí)現(xiàn)

    C++/Php/Python/Shell 程序按行讀取文件或者控制臺(tái)的實(shí)現(xiàn)

    下面小編就為大家?guī)硪黄狢++/Php/Python/Shell 程序按行讀取文件或者控制臺(tái)的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • C++11 強(qiáng)類型枚舉相關(guān)總結(jié)

    C++11 強(qiáng)類型枚舉相關(guān)總結(jié)

    這篇文章主要介紹了C++11 強(qiáng)類型枚舉的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c++11,感興趣的朋友可以了解下
    2021-02-02
  • C++中的六個(gè)函數(shù)

    C++中的六個(gè)函數(shù)

    本文給大家介紹了C++中的六個(gè)函數(shù),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-05-05
  • 老生常談C語言中指針的使用

    老生常談C語言中指針的使用

    這篇文章主要為大家詳細(xì)介紹了C語言中指針的使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++二維數(shù)組中數(shù)組元素存儲(chǔ)地址的計(jì)算疑問講解

    C++二維數(shù)組中數(shù)組元素存儲(chǔ)地址的計(jì)算疑問講解

    今天小編就為大家分享一篇關(guān)于C++二維數(shù)組中數(shù)組元素存儲(chǔ)地址的計(jì)算疑問講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02

最新評(píng)論

呼图壁县| 长兴县| 黄大仙区| 桦南县| 洪泽县| 台前县| 濮阳市| 泗阳县| 磐安县| 泾阳县| 鲁山县| 延津县| 房山区| 津市市| 油尖旺区| 武冈市| 石柱| 英吉沙县| 务川| 通辽市| 营山县| 张掖市| 四平市| 炎陵县| 普宁市| 莎车县| 莱西市| 修水县| 义乌市| 上饶市| 开封县| 高邮市| 凉城县| 新和县| 邹平县| 公安县| 邹平县| 东光县| 九江县| 崇文区| 青铜峡市|