學(xué)習(xí)C語(yǔ)言你所必須要了解的知識(shí)C 語(yǔ)言的發(fā)展方向20世紀(jì)80年代初,C 在 UNIX系統(tǒng)的小型機(jī)世界中已經(jīng)是主導(dǎo)語(yǔ)言了,從那時(shí)開(kāi)始,它已經(jīng)擴(kuò)展到個(gè)人計(jì)算機(jī)和大型機(jī), 大部分軟件開(kāi)發(fā)商公司都選用了 C 語(yǔ)言來(lái)開(kāi)發(fā)其子處理程序,電子表格軟件,編譯器等等。因?yàn)樗麄冎溃珻 可以產(chǎn)生緊湊而高效的程序。更重要的是,他們知道這些程序易于修改而且易于適應(yīng)新的計(jì)算機(jī)模式。 對(duì)于公司和熟悉 C 語(yǔ)言的人有幫助的東西,對(duì)其他用戶同樣有幫助。越來(lái)越多的計(jì)算機(jī)用戶已轉(zhuǎn)身使用 C 以便利用其優(yōu)點(diǎn)。不一定非得是計(jì)算機(jī)專(zhuān)業(yè)人員才能使用 C。 而到了20世紀(jì)90年代,許多軟件開(kāi)發(fā)商開(kāi)始轉(zhuǎn)身使用C++語(yǔ)言來(lái)進(jìn)行大的編程項(xiàng)目。C++向 C 語(yǔ)言嫁接了面向?qū)ο缶幊坦ぞ撸嫦驅(qū)ο缶幊淌且环N哲學(xué)思想,它試圖讓語(yǔ)言來(lái)適應(yīng)問(wèn)題,而不是讓問(wèn)題來(lái)適應(yīng)語(yǔ)言)。C++差不多是 C 的一個(gè)超集,意味著任何 C 程序都同時(shí)是,或差不多是一個(gè)有效的 C++程序。通過(guò)學(xué)習(xí) C,你能夠更容易的接受 C++的許多知識(shí)。 不管 C++ 和 Java 這樣較新的語(yǔ)言如何流行,C 在軟件產(chǎn)業(yè)中仍然是一種重要的技能,在最想獲得的技能中,它一般都列在前10名。特別是在嵌入式系統(tǒng)的編程中,C也補(bǔ)課或缺。也就是說(shuō),它將用來(lái)為汽車(chē),照相機(jī),DVD播放器和其他現(xiàn)代化設(shè)備中逐漸普及的微處理器編程。同樣,C 已開(kāi)始進(jìn)入長(zhǎng)期以來(lái)一直屬于 FORTRAN 的科學(xué)編程領(lǐng)域。最后,由于它是一種適合用來(lái)開(kāi)發(fā)操作系統(tǒng)的語(yǔ)言,C 在 Linux的開(kāi)發(fā)中也扮演著重要的角色。即使到現(xiàn)在,C 仍將保持強(qiáng)勁的勢(shì)頭。 簡(jiǎn)而言之,C 是最重要的編程語(yǔ)言之一,并將繼續(xù)如此,如果你想找一份編程的工作,則首先你所不能缺失的一種能力就是C的使用。 計(jì)算機(jī)工作的基本原理計(jì)算機(jī) 如果你打算學(xué)習(xí)如何使用 C語(yǔ)言來(lái)進(jìn)行編程,你就必須要了解計(jì)算機(jī)工作原理方面的一些知識(shí)。這些知識(shí)會(huì)幫助你更好的理解使用 C語(yǔ)言 編寫(xiě)程序與運(yùn)行該程序時(shí)最終會(huì)發(fā)生的事情之間的聯(lián)系。 現(xiàn)在的計(jì)算機(jī)可分為幾個(gè)部件。中央處理單元(CPU)擔(dān)負(fù)著絕大部分的計(jì)算工作,隨機(jī)訪問(wèn)存儲(chǔ)器(RAM)作為一個(gè)工作區(qū)來(lái)保存程序和文件;永久存儲(chǔ)器,一般是硬盤(pán),即使在計(jì)算機(jī)關(guān)機(jī)時(shí)也能記下程序和文件;還有各種外部輸入輸出設(shè)備(如鍵盤(pán),鼠標(biāo),打印機(jī))用來(lái)提供人與計(jì)算機(jī)之間的通信。CPU負(fù)責(zé)處理程序,所以我們集中來(lái)討論它的功能。 CPU CPU 的工作非常簡(jiǎn)單,至少在我們所了解的情況中是這樣的。它從內(nèi)存中獲取一個(gè)指令并執(zhí)行這條指令,然后從內(nèi)存中獲取下一個(gè)指令并執(zhí)行它,周而復(fù)始。一個(gè)千兆 CPU 可以在一秒種內(nèi)進(jìn)行大約一億次這樣的操作,所以 CPU 能以驚人的速度來(lái)從事極其枯燥的工作,如果用人力來(lái)執(zhí)行,可能會(huì)使一個(gè)人精神崩潰。CPU 有自己的小工作區(qū),該工作區(qū)由若干個(gè)寄存器組成,每個(gè)寄存器可以保存一個(gè)數(shù)。一個(gè)寄存器保存下一條指令的內(nèi)存地址,CPU 使用該信息獲取下一條指令。獲取一條指令后,CPU 在另一個(gè)寄存器中保存該指令并將第一個(gè)寄存器的值更新為下一條指令的地址。CPU 只能理解有限的指令(指令集)。還有,這些指令是相當(dāng)具體的,其中許多指令要求計(jì)算機(jī)將一個(gè)數(shù)從一個(gè)位置移動(dòng)到另一個(gè)位置,例如,從內(nèi)存單元移到寄存器。 這段說(shuō)明有兩個(gè)有趣的地方。首先,存儲(chǔ)在計(jì)算機(jī)中的一切內(nèi)容都是數(shù)字。數(shù)字是以數(shù)字形式存儲(chǔ) 的,字符也是以數(shù)字形式存儲(chǔ)的,每個(gè)字符有一個(gè)數(shù)字代碼(ASCII)。計(jì)算機(jī)裝載到寄存器的指令是以數(shù)字形式存儲(chǔ)的,指令集中的每條指令具有一個(gè)數(shù)字代碼。其次,計(jì)算機(jī)程序最終必須以這種數(shù)字指令代碼(或稱為機(jī)器語(yǔ)言)來(lái)表示。 了解了計(jì)算機(jī)運(yùn)行方式之后:如果你希望計(jì)算機(jī)幫你做某件事,就必須提供一個(gè)特定的指令列表,確切地告訴計(jì)算機(jī)要做的事及如何去做,計(jì)算機(jī)是死的,他只會(huì)按照你的命令去做事。你必須以一種計(jì)算機(jī)可以直接理解的語(yǔ)言(機(jī)器語(yǔ)言)來(lái)創(chuàng)建該程序。這是一項(xiàng)繁瑣,乏味,費(fèi)力的任務(wù)。即使將兩個(gè)想回這樣簡(jiǎn)單的事也必須被分解成若干個(gè)步驟: 1 將內(nèi)存單元為2000中的數(shù)字復(fù)制到寄存器1. 2 將內(nèi)存單元為2004中的數(shù)字復(fù)制到寄存器2. 3 將寄存器2的內(nèi)容加到寄存器1的內(nèi)容,答案保留在寄存器1中。 4 將寄存器1的內(nèi)容復(fù)制到內(nèi)存單元2008. 而且你必須用數(shù)字代碼來(lái)表示這些指令中的每一個(gè)! 如果你喜歡以這種方式編寫(xiě)程序,抱歉,機(jī)器語(yǔ)言編程的時(shí)代已經(jīng)過(guò)去很久了。 而如果你還是想要學(xué)習(xí)編程,那么你可以學(xué)習(xí)高級(jí)編程語(yǔ)言。 高級(jí)計(jì)算機(jī)語(yǔ)言和編譯器如 C語(yǔ)言 這樣的高級(jí)編程語(yǔ)言,可以從幾個(gè)方面簡(jiǎn)化你的編程過(guò)程。首先,你不必用數(shù)字代碼即ASCII來(lái)表示指令。其次,你所使用的指令更接近你考慮問(wèn)題的方式,而非接近計(jì)算機(jī)使用的詳細(xì)操作步驟。現(xiàn)在你不用再考慮特定 CPU 實(shí)現(xiàn)特定任務(wù)所必須采取的精確步驟,而是可以在更抽象的層次上表達(dá)你的意圖。 例如,要對(duì)兩個(gè)數(shù)求和 a+b=c,你可以編寫(xiě)下列內(nèi)容: c = a + b; 看到這樣的代碼,即使你沒(méi)學(xué)過(guò)編程,你也能大概的知道它所表達(dá)的意思。但如果看到用數(shù)字代碼表示的由若干條指令組成的機(jī)器語(yǔ)言等價(jià)代碼,則不會(huì)讓人這么明白。 比如這樣的一段匯編代碼,: mov ax,1 mov bx,2 add ax,bx mov cx,ax mov ax,4c00h 同樣是a+b=c,事實(shí)上如果沒(méi)有專(zhuān)門(mén)的學(xué)習(xí)過(guò),我完全不理解它所表達(dá)的是什么意思。 不幸的是,計(jì)算機(jī)對(duì)于我們來(lái)說(shuō)則正好相反。對(duì)計(jì)算機(jī)來(lái)說(shuō),高級(jí)指令是完全不能理解的胡言亂語(yǔ)。因而才有了 編譯器 的出現(xiàn)。編譯器是將高級(jí)語(yǔ)言程序翻譯成計(jì)算機(jī)所能理解的詳細(xì)機(jī)器語(yǔ)言指令集的程序。分工合作,我們只需要進(jìn)行高級(jí)思考,余下的交給編譯器來(lái)完成就好可以了。 |
|
|
來(lái)自: 有你最好DOC > 《Temp待分類(lèi)》