預(yù)處理酸舍,const,sizeof

1.宏定義

  • 用宏定義去求一個(gè)結(jié)構(gòu)體struct里某個(gè)變量相對(duì)struct的偏移量里初。要求偏移量首先struct a; return ((&a)->e) - (&a); 以下的宏是強(qiáng)制轉(zhuǎn)換0為a的地址啃勉。或者說(shuō)struct *p; p = &a;這樣比較好理解双妨,把0強(qiáng)制轉(zhuǎn)換成了(struct *)的類型淮阐。
#define FIND(struc, e)  (size_t)&((struct*)0->e)
  • 用宏去定義常量
#define SECONDS_PER_YEAR ( 60 * 60 * 24 * 365)UL
  • 宏描述函數(shù):之所以全部都要用括號(hào)括起來(lái)因?yàn)閐efine是直接復(fù)制過(guò)去的
#define MIN(A,B) ((A)<=(B) ? (A) : (B))

2.const

  • const和define定義的常量有什么區(qū)別:

const常量有數(shù)據(jù)類型,而宏通常沒(méi)有刁品,編譯器對(duì)前者可以進(jìn)行類型安全檢查枝嘶,對(duì)后者只進(jìn)行字符替換,可能發(fā)生意料不到的錯(cuò)誤哑诊。
調(diào)試工具不能對(duì)宏常量進(jìn)行調(diào)試群扶。
const可以指定常量的作用域,比如在指定類里面的class專屬常量镀裤,const成員常量是可以被封裝的竞阐,而宏定義做不到這一點(diǎn)。
const可以說(shuō)明到底是指針還是被指物為常量暑劝。

  • 在設(shè)計(jì)類的時(shí)候骆莹,一個(gè)原則就是對(duì)于不改變數(shù)據(jù)成員的成員函數(shù)都要在后面加 const,而對(duì)于改變數(shù)據(jù)成員的成員函數(shù)不能加 const担猛。

如果要改變的話幕垦,只需要加上 mutable修飾成員變量名

3.sizeof

  • 指針的大小是4字節(jié),而不論他指向的是什么傅联。
 char *sc = "0123456789";
 int *sp = (int *)malloc(100);
  • 字符數(shù)組用常量字符串賦值的時(shí)候末尾會(huì)自動(dòng)帶上\0.
  • float是4字節(jié)先改,double是8字節(jié),int是4字節(jié)
    char是1字節(jié)蒸走,string默認(rèn)是32字節(jié)
  • 結(jié)構(gòu)體的sizeof時(shí)要進(jìn)行內(nèi)存對(duì)齊仇奶,通常以結(jié)構(gòu)體內(nèi)存在長(zhǎng)度最長(zhǎng)的數(shù)據(jù)元素為對(duì)齊單位,如以下sizeof(B)為8字節(jié)比驻。
struct{   
     long int b1;//4字節(jié)     
     short int a2; //2字節(jié)
}B
  • 對(duì)齊方式的問(wèn)題该溯,比如同樣是4字節(jié)對(duì)齊。變量聲明的順序别惦,即分配內(nèi)存的順序也跟對(duì)齊有關(guān)


    1.png

    后者先定義int后定義兩個(gè)bool狈茉,注意bool只占1字節(jié)。


    2.png
  • 靜態(tài)變量存在全局?jǐn)?shù)據(jù)區(qū)而不是棧中掸掸,sizeof只求棧里的大小氯庆。

  • sizeof和strlen的區(qū)別

sizeof的結(jié)果類型是 size_t(typedef 為 uint類型)
sizeof是運(yùn)算符,strlen是函數(shù)
sizeof可以用類型做參數(shù),strlen只能用char* 做參數(shù)点晴,且必須以\0結(jié)尾感凤。sizeof還可以用函數(shù)做參數(shù)(去求返回值的類型大小)粒督。
數(shù)組做sizeof的參數(shù)不退化陪竿,而傳遞給strlen就退化為指針。
編譯時(shí)sizeof就計(jì)算了屠橄,所以sizeof(x)可以用來(lái)定義數(shù)組維數(shù)族跛,而strlen的結(jié)果要在運(yùn)行時(shí)才能計(jì)算出來(lái)徙缴,用來(lái)計(jì)算字符串的長(zhǎng)度呻惕,而不是類型占內(nèi)存的大小。

4.內(nèi)聯(lián)函數(shù)和宏定義

內(nèi)兩函數(shù)是指嵌入代碼铜涉,就是在調(diào)用函數(shù)的地方不是跳轉(zhuǎn)溪北,而是把代碼直接寫(xiě)到那里去桐绒。如果一個(gè)函數(shù)不斷被重復(fù)調(diào)用,而且函數(shù)只有簡(jiǎn)單的幾行之拨,且函數(shù)內(nèi)不包含for茉继,while,switch語(yǔ)句蚀乔,可以考慮用inline函數(shù)烁竭。
宏是在代碼出不加任何驗(yàn)證的簡(jiǎn)單替換,除非迫不得已絕不應(yīng)該使用吉挣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末派撕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子睬魂,更是在濱河造成了極大的恐慌终吼,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汉买,死亡現(xiàn)場(chǎng)離奇詭異衔峰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蛙粘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)威彰,“玉大人出牧,你說(shuō)我怎么就攤上這事⌒危” “怎么了舔痕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我伯复,道長(zhǎng)慨代,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任啸如,我火速辦了婚禮侍匙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘叮雳。我一直安慰自己想暗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布帘不。 她就那樣靜靜地躺著说莫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪寞焙。 梳的紋絲不亂的頭發(fā)上储狭,一...
    開(kāi)封第一講書(shū)人閱讀 52,196評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音捣郊,去河邊找鬼晶密。 笑死,一個(gè)胖子當(dāng)著我的面吹牛模她,可吹牛的內(nèi)容都是我干的稻艰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼侈净,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼尊勿!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起畜侦,我...
    開(kāi)封第一講書(shū)人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤元扔,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后旋膳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體澎语,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年验懊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了擅羞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡义图,死狀恐怖减俏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碱工,我是刑警寧澤娃承,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布奏夫,位于F島的核電站,受9級(jí)特大地震影響历筝,放射性物質(zhì)發(fā)生泄漏酗昼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一梳猪、第九天 我趴在偏房一處隱蔽的房頂上張望麻削。 院中可真熱鬧,春花似錦舔示、人聲如沸碟婆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)竖共。三九已至,卻和暖如春俺祠,著一層夾襖步出監(jiān)牢的瞬間公给,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工蜘渣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淌铐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓蔫缸,卻偏偏與公主長(zhǎng)得像腿准,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拾碌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 題目類型 a.C++與C差異(1-18) 1.C和C++中struct有什么區(qū)別吐葱? C沒(méi)有Protection行為...
    阿面a閱讀 7,665評(píng)論 0 10
  • 變量的聲明和定義變量聲明(declaration) 可以declaration很多次饲嗽,不占內(nèi)存空間,例如 exte...
    FlyingReganMian閱讀 1,042評(píng)論 0 1
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,359評(píng)論 0 35
  • 能找個(gè)傾訴的地方很不容易燕偶。多多少少有些想說(shuō)卻又不好分享的內(nèi)容喝噪。 臨近畢業(yè)壓力比想象中的要大,最近開(kāi)始反思情商的重要...
    wv_ivy閱讀 134評(píng)論 0 0
  • 前文 tableview是一個(gè)以前從來(lái)不重視的控件指么,因?yàn)楦杏X(jué)都被封裝好了酝惧,只要調(diào)用方法就可以了,但是用的時(shí)候一直會(huì)...
    XiuFi閱讀 360評(píng)論 0 1