- 相關(guān)推薦
C語言入門的基本學(xué)習(xí)方法
篇一:C語言入門的基本學(xué)習(xí)方法
一、C語言入門的基本學(xué)習(xí)方法
《C語言》的內(nèi)容很豐富,有的部分涉及到的細(xì)節(jié)很多,如硬件知識(shí)和數(shù)據(jù)結(jié)構(gòu)知識(shí)等,自學(xué)時(shí)不可能面面俱到,否則必然會(huì)顧此失彼,反而抓不住主要矛盾。筆者認(rèn)為對(duì)初學(xué)C語言的考生,開始不必在每一個(gè)細(xì)節(jié)上過于死摳,而應(yīng)當(dāng)把主要精力放在最基本、最常用的那些部份,待有一定的基礎(chǔ)后再深入到一些非主要的細(xì)節(jié),有一些細(xì)節(jié)需要通過較長期的實(shí)踐才能熟練掌握。初學(xué)C語言時(shí),可能會(huì)遇到有些問題理解不透,請(qǐng)不要?dú)怵H,鼓足勇氣向后面的內(nèi)容學(xué)習(xí),待學(xué)完后面的章節(jié)知識(shí),前面的問題也就迎刃而解了。學(xué)習(xí)C語言始終要記住―曙光在前頭‖和―千金難買回頭看‖,―千金難買回頭看‖是學(xué)習(xí)知識(shí)的重要方法,就是說,學(xué)習(xí)后面的知識(shí),不要忘了回頭弄清遺留下的問題和加深理解前面的知識(shí),這是學(xué)習(xí)的人最不易做到的,然而卻又是最重要的。比如:在C語言中最典型的是關(guān)于結(jié)構(gòu)化程序設(shè)計(jì)構(gòu)思,不管是那種教材,一開始就強(qiáng)調(diào)這種方法,這時(shí)也許你不能充分體會(huì),但是學(xué)到函數(shù)時(shí),再回頭來仔細(xì)體會(huì),溫故知新,理解它就沒有那么難了。學(xué)習(xí)C語言就是要經(jīng)過幾個(gè)反復(fù),才能前后貫穿,積累應(yīng)該掌握的C知識(shí)。
下面我們就圍繞《C語言》的特點(diǎn)、以98年全國等級(jí)考試
大綱為基礎(chǔ),把里面的重點(diǎn)和難點(diǎn),從宏觀和微觀兩個(gè)角度,就如何學(xué)好這門課程提供一些建議和方法,供大家學(xué)習(xí)時(shí)參考。
首先從宏觀上談一談自學(xué)C語言的方法。
我認(rèn)為要學(xué)好C語言首先必須了解等級(jí)考試C語言的大綱和內(nèi)容,以及各種輔助材料的用途,這是學(xué)好C的基礎(chǔ)。從以前的經(jīng)驗(yàn)以及考網(wǎng)上的一些信息可知,要自學(xué)C語言必須準(zhǔn)備以下資料:
1、 教材:大家現(xiàn)在都公認(rèn)是清華大學(xué)譚浩強(qiáng)主編的那本,當(dāng)然有其他的也可以,如高校出版社的。
2、 習(xí)題集:我認(rèn)為清華大學(xué)的《C語言樣題匯編》不錯(cuò)。書后面附有答案。
3、 上機(jī)練習(xí):我認(rèn)為南開大學(xué)的那個(gè)可以,最好是在考前從頭到尾做一遍。答案可以去考網(wǎng)下載區(qū)下載。
4、 大綱:這個(gè)肯定要的,可以在考網(wǎng)二級(jí)版那里去下,然后打印出來。
5、 自學(xué)計(jì)劃:為了做到有計(jì)劃有目的地學(xué)習(xí)C語言,大家可以根據(jù)自己的學(xué)習(xí)(或工作)情況,制定一個(gè)自學(xué)計(jì)劃,循序漸進(jìn)地學(xué)習(xí)。
6、 模擬盤:為了更好地熟悉考場(chǎng)環(huán)境,下一個(gè)模擬盤是必不可少的,可以在。下載,注意,在下載時(shí)要把鎖匙盤一起下回來,否則不能進(jìn)入考試環(huán)境。
7、 教學(xué)光盤:如果能買到C語言的教學(xué)光盤,那當(dāng)然更好,這樣可以更直觀地學(xué)習(xí)C語言了。
下面從微觀上針對(duì)C語言的幾個(gè)重點(diǎn)和難點(diǎn),逐個(gè)談?wù)劸唧w的自學(xué)方法。
二 如何學(xué)習(xí)C語言的運(yùn)算符和運(yùn)算順序
C語言的運(yùn)算功能十分豐富,運(yùn)算種類遠(yuǎn)多于其它程序設(shè)計(jì)語言。因此,當(dāng)多種不同運(yùn)算組成一個(gè)運(yùn)算表達(dá)式,即一個(gè)運(yùn)算式中出現(xiàn)多種運(yùn)算符時(shí),運(yùn)算的優(yōu)先順序和結(jié)合規(guī)則顯得十分重要。
初學(xué)者往往對(duì)此感到非常困難,覺得C語言學(xué)習(xí)太繁雜,其實(shí)只要我們對(duì)此合理進(jìn)行分類,找出它們與我們?cè)跀?shù)學(xué)中所學(xué)到運(yùn)算之間的不同點(diǎn)之后,記住這些運(yùn)算也就不困難了,有些運(yùn)算符在理解后更會(huì)牢記心中,將來用起來得心應(yīng)手,而有些可暫時(shí)放棄不記,等用到時(shí)再記不遲。
下面是所有的運(yùn)算符按優(yōu)先級(jí)不同分類列表:(對(duì)不起,因?yàn)楸砀耧@示不正常,已被我刪除大家可以看書上的)
表中列出15種優(yōu)先級(jí)的運(yùn)算符,從高到低,優(yōu)先級(jí)為1 ~ 15,最后邊一欄是結(jié)合規(guī)則,除第2、3級(jí)和第14級(jí)為從右至左結(jié)合外,其它都是從左至右結(jié)合,它決定同級(jí)運(yùn)算符的運(yùn)算順序。
下面我們通過幾個(gè)例子來說明:
。1) 3*20/4%10 這個(gè)表達(dá)式中出現(xiàn)3種運(yùn)算符,是同級(jí)運(yùn)算符,運(yùn)算順序按從左至右結(jié)合,因此先計(jì)算3 * 20=60,然后被4除,結(jié)果為15,最后是%(求余數(shù))運(yùn)算,所以表達(dá)式的最終結(jié)果為15%10 = 5
。2)a = 3;b = 5;c =++ a* b ;d =a + +* b;
例子中的―;‖是C語言的語句分隔符,執(zhí)行順序?yàn)閺淖蟮接遥?/p>
第1條語句執(zhí)行后a的值為3,第2條語句執(zhí)行后b的值為5,第3條語句中有兩個(gè)運(yùn)算符前置+ +和*,按表中所列順序,+ +先執(zhí)行,*后執(zhí)行,所以+ + a執(zhí)行后,a的值為4,由于+ +為前置運(yùn)算,所以a的值4參與運(yùn)算,C的值為20,最后執(zhí)行第4條語句,由于a + +為后置運(yùn)算,所以a值為4參與運(yùn)算,使得d的值仍為20,而a參與運(yùn)算后其值加1,值為5。
這個(gè)例子執(zhí)行后,a的值為5,b的值為5,c的值為20,d的值也是20。
(3)a = 3,b = 5,b+ = a,c = b* 5
例子中的―,‖是逗號(hào)結(jié)合運(yùn)算,上式稱為逗號(hào)表達(dá)式,自左向右結(jié)合,最后一個(gè)表達(dá)式的結(jié)果值就是逗號(hào)表達(dá)式的結(jié)果,所以上面的逗號(hào)表達(dá)式結(jié)果為40,a的值為3,b的值為8,c的值為40。
三、如何學(xué)習(xí)C語言的四種程序結(jié)構(gòu)
篇二:淺談C語言學(xué)習(xí)方法
淺談C語言學(xué)習(xí)方法
本人是一名windows程序?qū)懽鲉T,使用的語言是C語言.其他語言了解一點(diǎn)點(diǎn),但并不擅長.可能對(duì)于初學(xué)者來說,首先就是選擇一門程序設(shè)計(jì)語言.當(dāng)然,今天我將要說的不是這方面.每種語言都有它所擅長的領(lǐng)域與層面.當(dāng)然對(duì)于其他非C語言我是一名門外汗,我也不會(huì)站在C語言的立場(chǎng)去談?wù)撈渌魏我婚T語言.好了,在開始進(jìn)入正題之前,我想談?wù)剛(gè)人對(duì)C的一些看法:
C語言是一種早期的計(jì)算機(jī)語言,最初誕生目的是為了提供一種基于UNIX系統(tǒng)的工作語言.但是,后來卻被越來越多的人發(fā)現(xiàn)它的優(yōu)點(diǎn)與潛力.C本身比較接近底層,適合開發(fā)系統(tǒng)軟件甚至是操作系統(tǒng).我個(gè)人也認(rèn)為它是界于高級(jí)語言與匯編語言之間的中級(jí)語言.C語言是一門結(jié)構(gòu)化語言(我認(rèn)為主要是指它的控制結(jié)構(gòu)如:if if-else while for等等).C程序設(shè)計(jì)上有提到"自頂向下,逐步深入".以函數(shù)為原子功能模塊.對(duì)于大型的程序來說模塊化是很重要的,有一句話說的很好"優(yōu)質(zhì)的程序首先就是便與人們之間的相互討論與交流,其次才是執(zhí)行效率".當(dāng)然我個(gè)人認(rèn)為任何一名程序?qū)懽髡?都應(yīng)該養(yǎng)成一種特定的思維方式,以程序的思維方式來思考程序的實(shí)現(xiàn).前提就是要足夠的來了解計(jì)算機(jī)底層技術(shù).要不我想就連學(xué)習(xí)都是很困難的,凡事都是一個(gè)思路的問題嘛.標(biāo)準(zhǔn)的來衡量,C應(yīng)該算是高級(jí)語言陣營的一份子.可很多有C語言開發(fā)經(jīng)驗(yàn)的程序?qū)懽髡?通常親切的稱C為界于底級(jí)語言與高級(jí)語言之間的中級(jí)計(jì)算機(jī)語言.當(dāng)然不是因?yàn)镃比高級(jí)語言要差,之所以這么認(rèn)為是因?yàn)镃既具有高級(jí)語言的結(jié)構(gòu)化與可理解性又具有低級(jí)語言的高效率.同時(shí)C的移植性也是非常不錯(cuò)的,大家應(yīng)該知道,越是接近硬件,接近底層的語言就越加的依賴硬件環(huán)境,也就是我們所說的設(shè)備相關(guān)性.C這一點(diǎn)做的是非常棒的.說了這些,在從另一個(gè)角度去分析C語言.當(dāng)然每種語言都有它自身的優(yōu)缺點(diǎn),C也一樣.比如在現(xiàn)在高級(jí)語言與頂層技術(shù)的角度來看的話,C最大的缺陷就是Data與算法的分離.舉一個(gè)例子: 對(duì)于一個(gè)擁有幾千行甚至上萬行Code的程序來說,如果修改Data,比如我在Structure中增加一個(gè)字段,可能為此我的整個(gè)程序都要改動(dòng),這使得程序的可重用性大大降低.開發(fā)周期也大大的延長.但是在底層的角度來看這也正是C的優(yōu)點(diǎn).我為什么要這么說呢?我個(gè)人認(rèn)為在求解與實(shí)現(xiàn)一個(gè)小問題的時(shí)候,我們可以寫出一個(gè)通用的模塊處理不同的Data.當(dāng)然比如某些經(jīng)常用到的,基于數(shù)據(jù)結(jié)構(gòu)的一些常用算法我們可以寫出來在開發(fā)的時(shí)候我們可以直接把預(yù)先編寫的模塊插入到我們的程序中去,這不也是大大低了開發(fā)周期嗎?初學(xué)者完全可以根據(jù)自己的需求來編寫一個(gè)自定義庫.好了,說了這些,有些地方我理解錯(cuò)了,還請(qǐng)各位指出來,交流是很重要的,前提是要把自己的心態(tài)放平.下面我將談?wù)摫締柕闹攸c(diǎn),也就是如何來學(xué)習(xí)C語言,是給那些初學(xué)者讀的.
正題部分:
有人可能會(huì)說:學(xué)習(xí)還用你教啊,誰沒上過學(xué)啊.其實(shí)我今天要說的只是,站在一個(gè)過來人的角度,來分析與解釋學(xué)習(xí)C語言的過程中比較困難的地方.當(dāng)然我個(gè)人也會(huì)對(duì)比較具體的問題進(jìn)行解釋(個(gè)人看法).我一直在強(qiáng)調(diào)個(gè)人看法,我是想讓大家明白,對(duì)于同一個(gè)問題大家可能都很難達(dá)成統(tǒng)一的意見,希望批評(píng)的時(shí)候客氣點(diǎn)就好嘍!
初學(xué)者該看哪些書來入門:
在學(xué)習(xí)C語言之前,首先就要選擇一本教材,對(duì)于初學(xué)者,我個(gè)人并不建議去讀電子書籍,最好是買紙質(zhì)書來學(xué)習(xí).比如比較有名的"C程序設(shè)計(jì)"就很不錯(cuò),尤其是第二版.我也看過,比較適合中國人來初學(xué).整本書都在全面系統(tǒng)的講解C的語法結(jié)構(gòu),構(gòu)成C的語言元素包括:數(shù)據(jù)類型,支持的運(yùn)算符,標(biāo)識(shí)符(是由程序員按照命名規(guī)則起的名字,用于變量名,函數(shù)名,宏名等等),關(guān)鍵字(編譯系統(tǒng)用于實(shí)現(xiàn)C內(nèi)部功能的詞,比如:轉(zhuǎn)向goto和中斷break等等)等.看完這本書你基本上可以寫一些簡(jiǎn)單的小程序,當(dāng)然是DOS下的程序.如果你想在進(jìn)一步深入學(xué)習(xí)C的話,可以看"C陷阱與缺陷"這本書.寫這本書的作者是在Bell工作對(duì)C是非常精通的,應(yīng)該算是大師級(jí)的人物了.如果你暫時(shí)不想深入C的話,也沒問題,因?yàn)榇藭r(shí)你完全可以把C當(dāng)作一種編程工具來使用,你要做的就是多寫Code來讓自己熟悉C語言.經(jīng)驗(yàn)是非常重要的,"經(jīng)驗(yàn)是檢驗(yàn)真理的唯一方法".當(dāng)然你不會(huì)紙上談兵,如果你有過多
的開發(fā)經(jīng)驗(yàn)的話,就知道在紙上或最初的設(shè)想的Code拿到計(jì)算機(jī)上來實(shí)現(xiàn),最終會(huì)發(fā)現(xiàn)有很多地方都是不合理的,之前是沒有辦法想象到的.在初學(xué)C的過程中,比如你會(huì)看"C程序設(shè)計(jì)"來初學(xué)C,當(dāng)你學(xué)完每一章的時(shí)候要把習(xí)題來完成,這里就是考驗(yàn)?zāi)銓W(xué)到的知識(shí)了,看看你應(yīng)用能力怎么樣?尤其是程序設(shè)計(jì)題目,比較有意思.哪里不懂了.可以翻回去看書中的解釋.如果沒有解釋或你還是不明白,可以去問別人,與其他人交流. bbs,QQ或Google.直到你弄明白為止.當(dāng)你把問題最終解決的時(shí)候,我敢打賭,此時(shí)你一定很興奮,或者是比較興奮.這個(gè)時(shí)候知識(shí)已經(jīng)在你的大腦里了.
下面我為你推薦幾本不錯(cuò)的關(guān)于C語言籍:
C編程規(guī)范
C語言大全第四版 (個(gè)人感覺不錯(cuò),里面有提及C標(biāo)準(zhǔn)方面的東西)
C和指針
The C programming Language (經(jīng)典著作)
如果你要看電子書的話,以上幾本書在Google上很容易就可以找到.
關(guān)于C語言的初步理解:
對(duì)于初學(xué)者,會(huì)有太多的疑問,原因是你的知識(shí)面太小.現(xiàn)在我為你解釋一些C相關(guān)的東西.目的是讓你能夠有一個(gè)大致清晰的方向,來給自己安排學(xué)習(xí)計(jì)劃.專業(yè)的來說,我們是或?qū)⑹且幻绦騿T,程序員當(dāng)然就是要開發(fā)程序了.對(duì)于軟件開發(fā)方面我來解釋下術(shù)語:
C,C++,ASM,Basic,Java 這些是計(jì)算機(jī)語言.計(jì)算機(jī)語言很多,我就不多說了.
Visual C++,Visual Basic, Microsoft研發(fā)的開發(fā)環(huán)境,開發(fā)環(huán)境包括:編譯器,庫函數(shù)(每種C語言編譯器都支持標(biāo)準(zhǔn)庫,同時(shí)它們也會(huì)擴(kuò)展自己的庫,所以很多比較以來庫函數(shù)實(shí)現(xiàn)的程序員,在轉(zhuǎn)向不同的開發(fā)環(huán)境的時(shí)候最初總是不使用的,會(huì)遇到很多問題),一些資源模板等等.Visual 就是可視的意思,后面的就是語言.Visual C++支持C與C++2種語言,是根據(jù)文件的擴(kuò)展名來判斷采用哪種編譯內(nèi)核.
什么是"面向?qū)ο?quot;與"面向過程"? 其實(shí)是2種完全不同的程序設(shè)計(jì)思想,C語言是面向過程語言,而C++是面向?qū)ο笳Z言.在面向?qū)ο蟮恼Z言中有"類(Class)"這個(gè)東西.C中沒有.對(duì)象是由類來派生的一個(gè)實(shí)例,相反類就象是一個(gè)模板.
什么是SDK? SDK就是軟件開發(fā)工具包(Software Development Kit).指的范圍比較廣,通俗的說,凡是能夠與軟件開發(fā)過程占上邊的東西都屬于.比如:庫文件,參考資料,接口函數(shù),當(dāng)然語言也應(yīng)該屬于.
DDK就是設(shè)備驅(qū)動(dòng)程序開發(fā)工具包.
Turbo C: 這是一個(gè)比較精致的C語言編譯器.
理論上來說任何一門語言都可以在任何一種操作系統(tǒng)上運(yùn)行,前提是操作系統(tǒng)要支持.也就是我們所說的應(yīng)用程序接口,比如
Window API(Application Programming Interface),其實(shí)是Microsoft內(nèi)部定義的接口函數(shù)用于實(shí)現(xiàn)一些Windows內(nèi)部的功能.一些對(duì)象的描述術(shù)語,在不同平臺(tái)上是不同的,比如:Windows下的"調(diào)用",經(jīng)常被稱為"呼叫","返回"被稱為"傳回".
什么是"算法"? 你最初只需要知道算法實(shí)際上就是對(duì)特定的Data進(jìn)行運(yùn)算的一段代碼而已.也可以認(rèn)為在求解一道題目的時(shí)候,采取的方法與步驟的總稱.對(duì)于基本的C程序來說,實(shí)際上就是由Data與算法來組成的.
什么是"數(shù)據(jù)結(jié)構(gòu)"? 如果要是系統(tǒng)的講解,還需要一本書"數(shù)據(jù)結(jié)構(gòu)",簡(jiǎn)單的說:是程序要處理的數(shù)據(jù)在內(nèi)存中的存儲(chǔ)與組織的方式,分為:物理結(jié)構(gòu)與邏輯結(jié)構(gòu).邏輯結(jié)構(gòu)就是我們抽象化以后得到的大腦影象.
什么是"函數(shù)庫"? 它們以文件的形式存儲(chǔ),是預(yù)先定義好的函數(shù)的集合,我們的程序可以直接調(diào)用.當(dāng)然前提是要包含它的頭文件(庫函數(shù)的原型聲明).這些函數(shù)是在靜態(tài)連接期間組成到.exe文件中去的.Windows又存在另一種庫,叫做動(dòng)態(tài)連接庫(DLL).
GUI: 也就是"圖形用戶界面",就是我們?cè)赪indows上看到的,存在:菜單欄,滾動(dòng)條與顯示區(qū)域的窗口.
GDI: 圖形設(shè)備接口,從程序?qū)懽髡叩慕嵌葋砜?其實(shí)GDI就是由上百個(gè)函數(shù)與數(shù)據(jù)形態(tài)和一些相關(guān)的數(shù)據(jù)結(jié)構(gòu)所組成的.
學(xué)習(xí)C語言的全過程:
仔細(xì)想想,實(shí)際上學(xué)習(xí)C語言,最初是應(yīng)該先學(xué)習(xí)C語言的基礎(chǔ)語法.也就是學(xué)習(xí)C語言的組成部分.一部分一部分的向下學(xué).知識(shí)要一點(diǎn)一點(diǎn)的鞏固的.本人假設(shè)你學(xué)習(xí)C語言是看"C程序設(shè)計(jì)".我認(rèn)為你應(yīng)該先把C程序設(shè)計(jì)仔細(xì)的看一便,這樣你應(yīng)該可以對(duì)整本書和C語言的整體組成結(jié)構(gòu)有個(gè)大致的清晰了解.不要認(rèn)為學(xué)習(xí)只是在看書,看一便就可以了.你應(yīng)該學(xué)會(huì)記筆記,在記筆記的過程中,其實(shí)你就是在學(xué)習(xí),從知識(shí)的分析,理解,歸納,到最后以自己的思維方式記下來,這整個(gè)過程就是把書中的知識(shí)抽象到你自己的腦袋里.個(gè)人感覺學(xué)習(xí)效果非常好,不懂就問,要多多與人交流,要多思考,遇到問題自己先多想想,實(shí)在找不到問題出在哪,在去請(qǐng)教別人,不要有不懂的地方就直接去問別人,那樣對(duì)你沒太大的好處.其實(shí)要學(xué)會(huì)給自己安排適合自己的學(xué)習(xí)計(jì)劃,我大致來估計(jì)了一下,如果你每天能花4個(gè)小時(shí)安靜的,用心去學(xué)習(xí)的話,30天之內(nèi)你應(yīng)該可以掌握C語言了.其實(shí)在整個(gè)學(xué)習(xí)過程中你大多數(shù)時(shí)間都在看書,而不是面對(duì)電腦.在調(diào)試你的代碼之前,先在紙上把核心代碼大致寫出來,分析一下:程序的組成模塊(可以是一個(gè)函數(shù)或多個(gè)),由幾個(gè)函數(shù)來實(shí)現(xiàn),接口的封裝.采用哪種數(shù)據(jù)結(jié)構(gòu)更適合一些.關(guān)鍵在于算法.在你的最終程序發(fā)布之前,最好把你的代碼行數(shù)減到最少.不要只想著把代碼寫多.過多的代碼對(duì)程序來說是負(fù)擔(dān).你可以在Internet上下載一個(gè)文件(C語言經(jīng)典例題.chm),里面大致包含了上百個(gè)經(jīng)典的例題.每一個(gè)例題都是C語言某部分的典型應(yīng)用.花時(shí)間把這個(gè)文件中的所有例題代碼研究一下,最好能自己把代碼改善,以自己的方式來求解.以后你會(huì)發(fā)現(xiàn)你在寫一些應(yīng)用程序的時(shí)候經(jīng)常會(huì)有一些算法.會(huì)涉及到我之前提到的例題.最后我認(rèn)為你可以自己來寫C語言標(biāo)準(zhǔn)函數(shù),比如strcpy(); strlen();strcat();最好不要過分依賴庫函數(shù).
C語言學(xué)習(xí)的難點(diǎn):
現(xiàn)在應(yīng)該是已經(jīng)講到一個(gè)重點(diǎn)的環(huán)節(jié).很多網(wǎng)友都說學(xué)習(xí)C語言很難,我認(rèn)為C中有些部分是比較復(fù)雜,難理解的.當(dāng)然在你具有了豐富的開發(fā)經(jīng)驗(yàn)以后,這以不在是問題了.下面我個(gè)人會(huì)對(duì)我認(rèn)為學(xué)習(xí)C的時(shí)候比較難學(xué)的地方進(jìn)行我自己的闡述,如果哪里不正確,還請(qǐng)各位指出:
指針的出現(xiàn):
我想有很多初學(xué)者學(xué)習(xí)到指針那一章都感覺很難,下面我就以自己的想法來解釋下指針這個(gè)特殊的數(shù)據(jù)類型,
基本變量大家可能并不難理解,因?yàn)榛咀兞科鋬?nèi)部存儲(chǔ)了同類型的常量,事實(shí)上指針也是變量,不過呢,這個(gè)變量和基本變量有點(diǎn)不一樣,那你又問了:是哪里不一樣呢? 我告訴你,簡(jiǎn)單的來理解其實(shí)普通的變量內(nèi)部存儲(chǔ)了同類型的常量,而指針變量內(nèi)部存儲(chǔ)的則是"同類型變量的首地址".這樣你能夠理解嗎,是很簡(jiǎn)單的解釋,但不失本質(zhì).事實(shí)就是這樣的.如果你不理解"同類型變量的首地址"的話,我可以給你形象的來描述一下:
float Variable; //聲明一個(gè)單精度實(shí)型的變量
此時(shí),編譯器已經(jīng)給Variable分配了內(nèi)存空間,結(jié)構(gòu)如下:
__________
| |1001
|---------
| |1002
|---------
| |1003
|---------
| |1004
|---------
以上便是Variable的內(nèi)存結(jié)構(gòu)了,16位下的float占用4個(gè)字節(jié),內(nèi)存地址是線性編碼的,我們可以很容易的看出Variable的首地址就是他第一個(gè)單元的地址1001,好的,繼續(xù)向下看:
float *Pointer=&Variable; //聲明一個(gè)指向Variable的指針Pointer
_________
|1001 | 這是Pointer的內(nèi)存結(jié)構(gòu)
|_______|
我們的程序可以這樣來執(zhí)行:
Variable=1.0;
直接給Variable賦值,我們稱為直接訪問.
也可以這樣執(zhí)行:
*Pointer=1.0;
也可以通過指針變量來賦值,前面的*是間接運(yùn)算符號(hào),意思是求Pointer內(nèi)部存儲(chǔ)地址所標(biāo)識(shí)的內(nèi)存單元.也就是Variable.此時(shí),是賦值是通過間接訪問來實(shí)現(xiàn)的.可以這樣形象的描述:
________ (指向Variable) __________
|Pointer|------------------------------------>|Variable|
--------- ----------
以上應(yīng)該是指針實(shí)現(xiàn)的基本解釋,很多優(yōu)秀的程序?qū)懽髡叨颊f指針是C語言中的精華,的確如此,很多優(yōu)秀的程序?qū)懽髡邔懗绦蚨挤浅R蕾囍羔?因?yàn)樗芊奖?實(shí)際上指針?biāo)L問的對(duì)象是沒有限制的,他可以指向任何類型的變量,前提是只要我們知道內(nèi)存地址.因此指針也并不安全,在開發(fā)網(wǎng)絡(luò)程序的時(shí)候,盡量要少使用指針.下面我們?cè)趤砜匆幌轮羔樤跀?shù)組中的使用.
數(shù)組中的指針:
簡(jiǎn)單的來解釋下數(shù)組,數(shù)組結(jié)構(gòu)在C中使用比較普遍,其實(shí)最常用的就是char 類型的數(shù)組,主要是用于字符串操作.實(shí)際上數(shù)組是"同類型變量的有限集合".我想這應(yīng)該不難理解吧.數(shù)組在內(nèi)存中占用連續(xù)的內(nèi)存單元(地址連續(xù)),來存儲(chǔ)數(shù)組中的每一個(gè)元素.數(shù)組是預(yù)先分配好指定長度的內(nèi)存單元,供數(shù)組元素使用.它并不支持動(dòng)態(tài)內(nèi)存分配.在內(nèi)存中想要唯一的確定數(shù)組,需要2個(gè)標(biāo)識(shí):入口地址(函數(shù)名)和結(jié)束標(biāo)記('