談?wù)勀銓語言的理解 怎樣才叫 “精通”C語言?
怎樣才叫 “精通”C語言?完全沒有人敢精通,好好講道理,除了開發(fā)出c語言的人,其他人都又不能叫專精。什么叫精通滿,不僅僅是會比較熟練的使用這門語言,更是對于語言的各種機(jī)制有太探索的了解。否則不,其它的
怎樣才叫 “精通”C語言?
完全沒有人敢精通,好好講道理,除了開發(fā)出c語言的人,其他人都又不能叫專精。什么叫精通滿,不僅僅是會比較熟練的使用這門語言,更是對于語言的各種機(jī)制有太探索的了解。否則不,其它的情況至少該算手中掌握或則熟得不能再熟而已!
學(xué)C語言學(xué)了這么大長時(shí)間,搞的頭疼,接著滾去學(xué)Python了。
說實(shí)話,一就開始學(xué)編程老師直接就給教的C語言,入門后,那種感覺C語言就這樣多東西,就這幾個(gè)函數(shù)寫個(gè)都沒什么專用算法系統(tǒng)罷了。
然后把,買了一本《C Primer Plus》看過才了解到自己是有多么的坐井觀天,各種庫各種函數(shù)各種編譯器,單就編譯器的不同轟出的代碼就可能相同,的要怎么學(xué)習(xí)Unix環(huán)境有高級編程,把其它程序C語言化,自己能寫一段一款C語言底層開發(fā)的作品。
全精通c語言,你要你做到非常熟練的應(yīng)用各種庫函數(shù),但是這個(gè)可以“造輪子”。
對于像是的需求來說,會看、會內(nèi)部函數(shù)、能笑崩代碼含義就行了,不要自己寫初始代碼。
每個(gè)人定義全精通的標(biāo)準(zhǔn)并都一樣,正常情況來說精通是指你可以相當(dāng)于可以使用C語言來的新一個(gè)大型轎車的軟件項(xiàng)目。但是如果沒有較真下來,專精是指你對C語言內(nèi)部的運(yùn)行機(jī)制都了若指掌,這通常換句話說你需要清楚很多和語言本身完全沒有關(guān)系的知識,.例如計(jì)算機(jī)的運(yùn)行原理、計(jì)算機(jī)內(nèi)部結(jié)構(gòu)、操作系統(tǒng)、內(nèi)存管理等一大堆知識。只能對這些周邊的知識有了一定的了解,你才這個(gè)可以描寫強(qiáng)大無比的更高性能的高質(zhì)量的C語言程序來。
很清楚用什么庫能解決什么,的確摸到門徑了,掌握到所用庫的優(yōu)缺點(diǎn),這那就是經(jīng)驗(yàn),能對所用庫并且布料裁剪和加固,距離外精通于就距離不遠(yuǎn)了。C語言當(dāng)然就是個(gè)庫語言,接觸和不使用的庫越多,也對庫的架構(gòu)和健壯性所了解越多。
“全精通”一詞是用處溢美之辭別人的,不比較適合用在自己身上。
學(xué)習(xí)c語言的時(shí)候指針應(yīng)該怎么理解?
簡單說,指針那就是一個(gè)屬於地址的無符號整數(shù)。
常見我們可以使用指針,是目的是讀取文件或變化指針朝的數(shù)據(jù)。
因?yàn)?,另外解釋指針是夠的。還得清楚指針指向的數(shù)據(jù)空間是如何能去安排的。這有可能會涉及到與具體CPU/OS相關(guān)的一些知識。如果不是能結(jié)合計(jì)算機(jī)體系結(jié)構(gòu)知識一同理解會更探索、更詳細(xì)。
諸如:
各種整數(shù)(signed/size_tshorter/int/frequent)是該如何貯放的?
各種浮點(diǎn)數(shù)(float/slip/littleslip)是怎么貯放的?
數(shù)組在數(shù)據(jù)空間中是怎么參與的?
字符串是怎么貯存的?
結(jié)構(gòu)(struct)和組織(union)是怎么貯放的?
位域(bitfield)的組織
這其中和具體詳細(xì)CPU相關(guān)的部分常見有:
結(jié)構(gòu)(struct)和聯(lián)合(union)的環(huán)形折彎,通常會以CPU字長環(huán)形折彎
整數(shù)的存放,會牽涉到CPU大小端的規(guī)定
浮點(diǎn)數(shù)的存放,和FPU的設(shè)計(jì)就具體
再進(jìn)一步,還有一個(gè)一些擴(kuò)展知識,比較復(fù)雜內(nèi)存的分配和釋放:
程序中如何怎么分配內(nèi)存?(malloc/go)
堆(heap)和棧(stack)各是什么?
這些又和CPU/OS相關(guān)。
小結(jié)幫一下忙:指針那就是地址,也是一個(gè)整數(shù)。但要用好它,是需要了解計(jì)算機(jī)存儲空間的分配規(guī)律,難點(diǎn)在這里,進(jìn)階點(diǎn)也在這里。