0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一句話幫你理解 typedef 的用法

丫丫119 ? 來源:未知 ? 作者:肖冰 ? 2019-09-19 14:20 ? 次閱讀

前言

C語言中typedef用來給復(fù)雜聲明定義別名非常的方便,不過有時(shí)候typedef在復(fù)雜聲明中不好理解。本文關(guān)鍵的一句話幫你理解ytpedef的用法。

typedef常見應(yīng)用場景

在這之前,我們來看看一些常見應(yīng)用場景。

為特定含義的類型取別名

例如,假設(shè)速度是整型值:

typedefintSpeedType;

那么你就可以像下面這樣使用了:

#include
typedefintSpeedType;
intmain(void)
{
SpeedTypes=10;
printf("speedis%dm/s",s);
return0;
}

在main函數(shù)中,你可以直接使用SpeedType作為一種類型來定義變量了。有人可能問了,為什么要這樣,直接使用int不是更好嗎?那么如果你的代碼中很多地方都用到了這個,但是突然有一天不再使用int,而是使用long呢?是不是直接修改typedef部分就可以了?(當(dāng)然打印的地方也需要變,可自定義打印函數(shù)),另外一方面,通過SpeedType這個名字就可以非常直接的讀懂變量的含義。

事實(shí)上,size_t,socklen_t等類型都是類似的定義。

說到typedef,就需要提一下define了,define只是一個字符串簡單替換。當(dāng)然下面這樣的例子你可能見過很多次了:

#definePIONTERint*
PIONTERa,b;//等同于int*a,b;
typedefint*POINTER1
POINTER1c,d;//等同于int*c;int*d;

為結(jié)構(gòu)體取別名

這個也比較常見,不過有的人認(rèn)為,為結(jié)構(gòu)體取別名并不是一個明智的選擇,因?yàn)樗谑褂玫臅r(shí)候不能直觀看到它是結(jié)構(gòu)體類型了。

structinfo
{
charname[128];
intlength;
};

那么你在聲明變量的時(shí)候,需要帶上struct,即像下面這樣使用:

structinfovar;

但是如果你用typedef取個別名呢?

typedefstructinfo
{
charname[128];
intlength;
}Info;

你就可以像下面這樣使用了:

Infovar;

聲明函數(shù)指針類型

前面的都很好理解,那么來看看函數(shù)指針:

typedefvoid*(*Fun)(int,int);

這里將返回類型為void *,入?yún)閕nt的函數(shù)類型命名為Fun,那么在其他地方,就可以像下面這樣使用啦:

//來源:公眾號【編程珠璣】,博客地址:https://www.yanbinghu.com
#include
typedefvoid*(*Fun)(int,int);
void*test(inta,intb)
{
printf("%d,%d
",a,b);
//dosomething
returnNULL;
}
intmain(void)
{
Funmyfun=test;//這里的Fun已經(jīng)是一種類型名了
myfun(1,1);
return0;
}

是不是發(fā)現(xiàn)跟前面的不一樣了呢?類型別名的位置飄忽不定,有的在最后,有的在中間。

當(dāng)然typedef的場景并不限于以上幾種,這里僅僅是舉例。

一句話理解

我不知道你是不是已經(jīng)完全理解了前面的場景,無論理解與否,這句話都能很好的幫助你再次理解前面的內(nèi)容:

typedef中聲明的類型在變量名的位置出現(xiàn)。

什么意思呢,我們回頭來看。我們是怎么聲明int類型變量的?

intTypename;

像上面這樣,對不對?那么用typedef之后呢?把變量名的位置替換為別名:

typedefintTypename;

好了,你現(xiàn)在已經(jīng)把為int取別名為Typename。

再來看結(jié)構(gòu)體,聲明普通結(jié)構(gòu)體變量:

structinfo
{
charname[128];
intlength;
};
structinfoTypename;

用typedef取別名,別名取代變量名的位置:

structinfo
{
charname[128];
intlength;
};
typedefstructinfoTypename;

好了,你現(xiàn)在已經(jīng)為struct info取別名為Typename。
當(dāng)然這可能我們平常通常使用下面這種寫法:

typedefstructinfo
{
charname[128];
intlength;
}Typename;

再來看函數(shù)指針類型,我們平常是如何聲明函數(shù)的?

void*function(int,int);

那么使用typedef取別名呢?用別名取代函數(shù)名的位置即可:

void*(*Fun)(int,int);

不過這里需要注意用括號將這個別名括起來,并在前面加*號。

總結(jié)

至此,相信你對typedef的使用有了更清晰的認(rèn)識了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • typedef
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    9525
  • main
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

    6115
收藏 人收藏

    評論

    相關(guān)推薦

    文生視頻Pika 1.0爆火!一句話生成視頻,普通人也能當(dāng)“導(dǎo)演”

    幾乎不需要任何門檻,用戶只需要輸入一句話,就可以生成想要的各種風(fēng)格的視頻,并通過簡單的描述,更改視頻中的形象和風(fēng)格。 ? Pika labs官方宣傳視頻效果圖相當(dāng)驚艷 ? 一句話生成視頻,顛覆傳統(tǒng)視頻制作 ? Pika成立于今年4月,創(chuàng)始人郭文景和聯(lián)合創(chuàng)始人兼CTO Ch
    的頭像 發(fā)表于 12-01 01:08 ?3615次閱讀
    文生視頻Pika 1.0爆火!<b class='flag-5'>一句話</b>生成視頻,普通人也能當(dāng)“導(dǎo)演”

    雙電源運(yùn)放可以采用正負(fù)電壓絕對值不相等的電源供電嗎?

    其他的影響么? 還有就是手冊上的下面一句話怎么理解? Analog Input Voltage Range . . . . . . . . . . . . . . . . . . . . . . . . . . . ±40V 難道我采用-5V,+12V給ina129供電輸
    發(fā)表于 09-12 06:14

    求助,關(guān)于TLE2141的供電問題求解

    在TLE2141的DATASHEET中,在供電方面有一句話,Single or Split Supply . . . 4 V to 44 V,此句話不甚明確,雖然DATASHEET中有例子,可證明 此運(yùn)放可5V單電源供電,我本人仍有疑問,40V單電源供電可否,請各位大拿
    發(fā)表于 09-09 06:46

    想把差分信號轉(zhuǎn)為單端信號,不是音頻信號,OPA365是否還可以使用呢?

    我想請教下,想把差分信號轉(zhuǎn)為單端信號(頻段在100-600KHz),不是音頻信號,這款芯片是否還可以使用呢?另:用TINA想仿真OPA365對于所需頻段差分信號得的放大效果是否滿足實(shí)用性,但是搭建不通。可能剛上手,玩不轉(zhuǎn)這款軟件。所以想取捷徑,問問諸位,我的第一句話可否回答
    發(fā)表于 08-27 06:33

    如何設(shè)計(jì)RC去耦的R和C的值?

    如何設(shè)計(jì)RC去耦的R和C的值,最后一句話的意思是負(fù)載電流的變化決定R和C的值,能舉個例子怎么計(jì)算這個值嗎?
    發(fā)表于 08-14 07:47

    esp32c3 vdd_spi如何作為gpio11使用?

    看到C3的手冊里有這樣一句話 當(dāng) VDD_SPI 無需為外部供電時(shí),VDD_SPI 亦可作為 GPIO11 使用 請問 怎么設(shè)置呢? 在 arduino 中設(shè)定 pinMode(11
    發(fā)表于 06-17 06:27

    一句話讓你理解線程和進(jìn)程

    今天給大家分享下線程與進(jìn)程,主要包含以下幾部分內(nèi)容:一句話說明線程和進(jìn)程操作系統(tǒng)為什么需要進(jìn)程為什么要引入線程圖說明線程和進(jìn)程的關(guān)系一句話讓你
    的頭像 發(fā)表于 06-04 08:04 ?955次閱讀
    <b class='flag-5'>一句話</b>讓你<b class='flag-5'>理解</b>線程和進(jìn)程

    一句話概括DDR、LPDDR、GDDR的區(qū)別

    以DDR開頭的內(nèi)存適用于計(jì)算機(jī)、服務(wù)器和其他高性能計(jì)算設(shè)備等領(lǐng)域,目前應(yīng)用廣泛的是DDR3和DDR4;
    的頭像 發(fā)表于 05-10 14:21 ?4963次閱讀
    <b class='flag-5'>一句話</b>概括DDR、LPDDR、GDDR的區(qū)別

    三層交換機(jī)的工作原理 三層交換機(jī)不能完全取代路由器的原因

    三層交換機(jī)的工作原理可以用一句話概括為:”次路由,多次交換“。
    的頭像 發(fā)表于 03-29 09:29 ?612次閱讀

    NPN型三極管發(fā)射結(jié)電勢和基極電流有關(guān)問題

    教材有一句話:發(fā)射結(jié)電勢減小,導(dǎo)致基極電流減小 這句話如果單看三極管的輸入特性曲線確實(shí)沒問題,但是三極管實(shí)際工作的靜態(tài)工作點(diǎn)Q是輸入特性曲線和輸入回路負(fù)載線的交點(diǎn),這個時(shí)候減小,??????負(fù)載線
    發(fā)表于 03-23 09:36

    請問AD2428 TX crossbar是個什么功能?

    AD2428 TRM中,描述升采樣功能的最后一句話時(shí),提到了個TX crossbar功能,全文搜索crossbar只有這處,這是個什么功能?
    發(fā)表于 03-07 07:00

    RS觸發(fā)器邏輯門組成和邏輯功能表

    RS是由兩個或非門組成,而或非門的輸出又作為另個或非門的輸入。下面說一句對RS觸發(fā)器理解最重要的一句話:或非門如果有個輸入端為1,那么不
    的頭像 發(fā)表于 03-05 17:35 ?1w次閱讀
    RS觸發(fā)器邏輯門組成和邏輯功能表

    一句話證明我是工程師?這不純純送分題

    晶振揚(yáng)興科技
    揚(yáng)興科技
    發(fā)布于 :2023年12月05日 18:57:33

    關(guān)于Python多進(jìn)程和多線程詳解

    進(jìn)程(process)和線程(thread)是操作系統(tǒng)的基本概念,但是它們比較抽象,不容易掌握。關(guān)于多進(jìn)程和多線程,教科書上最經(jīng)典的一句話是“進(jìn)程是資源分配的最小單位,線程是CPU調(diào)度的最小單位”。
    的頭像 發(fā)表于 11-06 14:46 ?756次閱讀
    關(guān)于Python多進(jìn)程和多線程詳解

    C語言中數(shù)字怎么轉(zhuǎn)成指針?

    C語言中數(shù)字怎么轉(zhuǎn)成指針,比如我要去內(nèi)存地址為0x100的內(nèi)容,用一句話表達(dá),不如uchar a=?我要問號等于0x100地址的內(nèi)容
    發(fā)表于 10-31 06:29