《C和指針》——C語(yǔ)言補(bǔ)漏(基本用法篇)


title: "《C和指針》——C語(yǔ)言補(bǔ)漏(基本用法篇)"
date: 2014-05-14 19:06:57
categories: 韋編三絕


《C和指針》——Kenneth A.Reek

這本書應(yīng)該是我最后一次買盜版的經(jīng)典書籍了筹吐,買了這本書后我就寫下了學(xué)生應(yīng)盡量購(gòu)買正版,發(fā)誓以后都在正規(guī)的書店(包括網(wǎng)上書店)買書绒极。

本來(lái)以為這本書的內(nèi)容挺少的骏令,但當(dāng)讀到指針的部分發(fā)現(xiàn)我以前了解的真的很少,還好我上學(xué)期認(rèn)真學(xué)過(guò)《數(shù)據(jù)結(jié)構(gòu)》這門課垄提,對(duì)指針的使用還算熟練榔袋,不然光靠以前自學(xué)的譚浩強(qiáng)的C語(yǔ)言和課堂上教的,根本就只能算是一個(gè)只知道C語(yǔ)言這個(gè)東西的人铡俐。

至于這本書的閱讀時(shí)間凰兑,我覺(jué)得我的時(shí)間并不正確,這本書應(yīng)該是在C語(yǔ)言基礎(chǔ)學(xué)完后审丘,在數(shù)據(jù)結(jié)構(gòu)之前來(lái)學(xué)習(xí)吏够,不僅可以深入理解一下C語(yǔ)言的精髓,還可以順利過(guò)渡到數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)滩报。

在這里就以前我不了解的一些C語(yǔ)言知識(shí)做一些歸納(不過(guò)這里很多都是一些以前沒(méi)見(jiàn)過(guò)的函數(shù)以及一些用法锅知,當(dāng)然這些函數(shù)或者是用法并不是罕見(jiàn)的,只是在學(xué)生中比較罕見(jiàn)罷了脓钾,我在網(wǎng)上看過(guò)很多高手的代碼售睹,發(fā)現(xiàn)有一些還是挺常用的)。

  1. 要從邏輯上刪除一段C代碼可训,更好的辦法是使用#if指令昌妹。這樣可以防止在一段內(nèi)部已經(jīng)有注釋的代碼外面加上注釋所引起的注釋不匹配的問(wèn)題:

    #if 0
    statements
    #endif
    
  2. EOF是一個(gè)整型值,在很多讀入字符的情況下握截,如果要判斷輸入是否結(jié)束飞崖,需要把字符讀入為整型值,這樣可以判斷輸入是否結(jié)束谨胞。

  3. 程序會(huì)使用一個(gè)運(yùn)行時(shí)堆棧固歪,它用于存儲(chǔ)函數(shù)的局部變量和返回地址。程序同時(shí)也可以使用靜態(tài)內(nèi)存胯努,存儲(chǔ)與靜態(tài)內(nèi)存中的變量在程序的整個(gè)執(zhí)行過(guò)程中將一直保留著他們的值牢裳。

  4. 標(biāo)準(zhǔn)規(guī)定了幾個(gè)特殊的三字母詞术瓮,比如??(代表[,不過(guò)這個(gè)應(yīng)該很少見(jiàn)贰健,至少我之前一直沒(méi)碰到這種情況

  5. 如果要?jiǎng)?chuàng)建新的類名胞四,應(yīng)該使用typedef而不是#define,因?yàn)楹笳邿o(wú)法正確處理指針類型伶椿,例如:

    #define ptr char*
    ptr a,b;
    

    上面代碼會(huì)使a成為一個(gè)char指針辜伟,而b卻被聲明為一個(gè)char

  6. 在定義常量的時(shí)候我們應(yīng)該使用#define而不是const:

    #define MAX_ELEMENTS 50
    int const max_elements 50;
    

    因?yàn)橹灰试S使用字面值的地方都可以使用前者,比如聲明數(shù)組的長(zhǎng)度脊另,const變量只能用于允許使用變量的地方导狡。

  7. 鏈接屬性:分為3種——external(外部)、internal(內(nèi)部)和none(無(wú))偎痛。沒(méi)有鏈接屬性的標(biāo)識(shí)符(none)總是被當(dāng)作單獨(dú)的個(gè)體旱捧,也就是說(shuō)該標(biāo)識(shí)符被當(dāng)作獨(dú)立不同的實(shí)體。屬于internal鏈接屬性的標(biāo)識(shí)符在同一個(gè)源文件內(nèi)的所有聲明都指同一個(gè)實(shí)體踩麦,但位于不同源文件的多個(gè)聲明則分屬不同的實(shí)體枚赡。最后,屬于external鏈接屬性的標(biāo)識(shí)符不論聲明多少次谓谦,位于幾個(gè)源文件都表示同一個(gè)實(shí)體贫橙。

  8. 凡是在任何代碼塊之外聲明的變量總是存儲(chǔ)于靜態(tài)內(nèi)存中,也就是不屬于堆棧的內(nèi)存反粥,這類變量稱為靜態(tài)變量卢肃。

  9. 標(biāo)準(zhǔn)說(shuō)明無(wú)符號(hào)值的所有移位操作都是邏輯移位,但對(duì)于有符號(hào)值才顿,到底是采用邏輯移位還是算術(shù)移位取決于編譯器莫湘。也就是說(shuō)一個(gè)程序如果所使用了有符號(hào)數(shù)的移位操作,他就是不可移植的郑气。

  10. C函數(shù)可以理解為所有的參數(shù)均以“傳值調(diào)用”的方式進(jìn)行傳遞幅垮,傳遞數(shù)組時(shí)也傳遞的是指針的值。

  11. 只要有可能竣贪,函數(shù)的指針形參都應(yīng)該聲明為const

  12. 不要使用strlen來(lái)相減军洼,因?yàn)閟trlen是無(wú)符號(hào)數(shù)巩螃,那么相減的結(jié)果必然也是無(wú)符號(hào)數(shù)演怎,所以像if( strlen(x) - strlen(y)= 0 )這種用法就是錯(cuò)的,因?yàn)榻Y(jié)果永遠(yuǎn)都是大于等于零

  13. 注重可移植的程序應(yīng)該避免使用位段避乏。任何可以用位段實(shí)現(xiàn)的任務(wù)都可以使用移位和屏蔽來(lái)實(shí)現(xiàn)爷耀。

  14. 編譯器為一個(gè)結(jié)構(gòu)變量的成員分配內(nèi)存時(shí)要滿足他們的邊界對(duì)齊要求。在實(shí)現(xiàn)結(jié)構(gòu)存儲(chǔ)的邊界對(duì)齊時(shí)拍皮,可能會(huì)浪費(fèi)一部分內(nèi)存空間歹叮。根據(jù)邊界對(duì)齊要求降序排列結(jié)構(gòu)成員可以最大限度地減少結(jié)構(gòu)存儲(chǔ)中浪費(fèi)的內(nèi)存空間跑杭。

  15. 在程序中,數(shù)組的長(zhǎng)度一般是根據(jù)運(yùn)行后決定的咆耿,所以最好使用動(dòng)態(tài)內(nèi)存分配德谅。

  16. 幾個(gè)預(yù)定義符號(hào):
    FILE: 進(jìn)行編譯的源文件名
    LINE: 文件當(dāng)前行的行號(hào)
    DATE: 文件被編譯的日期
    TIME: 文件被編譯的時(shí)間
    STDC: 如果編譯器遵循ANSI C,其值就為1萨螺,否則未定義

  17. 如果相同的代碼需要出現(xiàn)在程序的幾個(gè)地方窄做,通常的做法是將它實(shí)現(xiàn)為一個(gè)函數(shù),而不是宏#define

  18. 條件編譯:可以允許選擇某條語(yǔ)句或某組語(yǔ)句進(jìn)行翻譯或者被忽略慰技,這常用語(yǔ)本地調(diào)試:

    #if constant-expression
    statements
    #endif 
    
  19. 文件包含:如果是庫(kù)文件一般用<>椭盏,如果是本地文件一般用””

  20. 刪除多重包含引發(fā)的危險(xiǎn):

    #ifndef _HEADERNAME_H
    #define _HEADERNAME_H 1
    /*
     ** All the stuff that you want in the header file
     */
    #endif
    
  21. 絕大多數(shù)流是完全緩沖的,意味著“讀取”和“寫入”實(shí)際上是從一塊被稱為緩沖區(qū)的內(nèi)存區(qū)域來(lái)回賦值數(shù)據(jù)吻商。用于輸出流的緩沖區(qū)只有當(dāng)它寫滿時(shí)才會(huì)被刷新到設(shè)備或文件中掏颊。也可使用fflush迫使緩沖區(qū)的數(shù)據(jù)立即寫入,不管它是否已滿艾帐。

  22. 函數(shù)庫(kù)為I/O所提供的接口稱為流乌叶。

  23. fgets函數(shù)比gets函數(shù)更為安全,它把緩沖區(qū)長(zhǎng)度作為參數(shù)之一柒爸,可以保證一個(gè)長(zhǎng)輸入行不會(huì)溢出緩沖區(qū)枉昏,gets函數(shù)會(huì)去除它所讀取的行的換行符,puts函數(shù)在寫入到緩沖區(qū)的文本后面加上一個(gè)換行符揍鸟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末兄裂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子阳藻,更是在濱河造成了極大的恐慌晰奖,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腥泥,死亡現(xiàn)場(chǎng)離奇詭異匾南,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蛔外,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門蛆楞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)沥潭,“玉大人虫几,你說(shuō)我怎么就攤上這事〉辰恚” “怎么了矛纹?”我有些...
    開(kāi)封第一講書人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵臂聋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)孩等,這世上最難降的妖魔是什么艾君? 我笑而不...
    開(kāi)封第一講書人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮肄方,結(jié)果婚禮上冰垄,老公的妹妹穿的比我還像新娘。我一直安慰自己权她,他們只是感情好播演,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著伴奥,像睡著了一般写烤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拾徙,一...
    開(kāi)封第一講書人閱讀 51,231評(píng)論 1 299
  • 那天洲炊,我揣著相機(jī)與錄音,去河邊找鬼尼啡。 笑死暂衡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的崖瞭。 我是一名探鬼主播狂巢,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼书聚!你這毒婦竟也來(lái)了唧领?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤雌续,失蹤者是張志新(化名)和其女友劉穎斩个,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體驯杜,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡受啥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鸽心。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滚局。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖顽频,靈堂內(nèi)的尸體忽然破棺而出藤肢,到底是詐尸還是另有隱情,我是刑警寧澤冲九,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布谤草,位于F島的核電站,受9級(jí)特大地震影響莺奸,放射性物質(zhì)發(fā)生泄漏丑孩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一灭贷、第九天 我趴在偏房一處隱蔽的房頂上張望温学。 院中可真熱鬧,春花似錦甚疟、人聲如沸仗岖。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)轧拄。三九已至,卻和暖如春讽膏,著一層夾襖步出監(jiān)牢的瞬間檩电,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工府树, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留俐末,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓奄侠,卻偏偏與公主長(zhǎng)得像卓箫,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子垄潮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

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

  • 指針是C語(yǔ)言中廣泛使用的一種數(shù)據(jù)類型烹卒。 運(yùn)用指針編程是C語(yǔ)言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu)弯洗; ...
    朱森閱讀 3,440評(píng)論 3 44
  • 姓名:李濤 學(xué)號(hào):17021211100 轉(zhuǎn)載自http://mp.weixin.qq.com/s/YUXrJbi...
    關(guān)公面前疊飛機(jī)閱讀 1,504評(píng)論 1 9
  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛(ài)閱讀 1,976評(píng)論 0 7
  • 是深夜甫题。 導(dǎo)航將我們引向陌生的地方,舊屋涂召,路燈坠非,無(wú)盡的荒涼,仿佛上個(gè)世紀(jì)遺留下來(lái)的房屋透著森森的冷意果正,與此截然相反...
    山有扶蘇_1fb5閱讀 194評(píng)論 0 0
  • 總以為,見(jiàn)你便是全部 才發(fā)現(xiàn)迫皱,我錯(cuò)得很離譜 青春的舞臺(tái)歉闰,已經(jīng)謝幕 忘了的曾今辖众,想要把你呵護(hù) 黃色的光影,幻滅了苦楚...
    好先生vagrant閱讀 201評(píng)論 0 0