第一篇:怎樣學習C語言
一,怎樣學習C語言
很多人對學習C語言感到無從下手,經常問我同一個問題:究竟怎樣學習C語言?我是一個教師,已經開發(fā)了很多年的程序,和很多剛剛起步的人一樣,學習的第一個計算機語言就是C語言。經過這些年的開發(fā),我深深的體會到C語言對于一個程序設計人員多么的重要,如果不懂C語言,你想寫底層程序這幾乎聽起來很可笑,不懂C語言,你想寫出優(yōu)秀高效的程庌輌這簡直就是天方夜譚。為什么C語言如此重要呢?
第一:C語言語法結構很簡潔精妙,寫出的程序也很高效,很便于描述算法,大多數(shù)的程序員愿意使用C語言去描述算法本身,所以,如果你想在程序設計方面有所建樹,就必須去學它。
第二:C語言能夠讓你深入系統(tǒng)底層,你知道的操作系統(tǒng),哪一個不是C語言寫的?所有的windows,Unix,Linux,Mac,os/2,沒有一個里外的,如果你不懂C語言,怎么可能深入到這些操作系統(tǒng)當中去呢?更不要說你去寫它們的內核程序了。
第三:很多新型的語言都是衍生自C語言,C++,Java,C#,J#,perl...哪個不是呢?掌握了C語言,可以說你就掌握了很多門語言,經過簡單的學習,你就可以用這些新型的語言去開發(fā)了,這個再一次驗證了C語言是程序設計的重要基礎。還有啊,多說一點:即使現(xiàn)在招聘程序員,考試都是考C語言,你想加入it行業(yè),那么就一定要掌握好C語言。
那么究竟怎樣學習C語言呢?
1:工欲善其事,必先利其器
這里介紹幾個學習C語言必備的東東:
一個開發(fā)環(huán)境,例如turbo C 2.0,這個曾經占據(jù)了DOS時代開發(fā)程序的大半個江山。但是現(xiàn)在windows時代,用turbo C有感覺不方面,編輯程序起來很吃力,并且拖放,更沒有函數(shù)變量自動感應功能,查詢參考資料也不方便。建議使用Visual C++,這個東西雖然比較大塊頭,但是一旦安裝好了,用起來很方便。
一本學習教程,現(xiàn)在C語言教材多如牛毛,但推薦大家使用《C語言程序設計》譚浩強主編 第二版 清華大學出版社,此書編寫的很適合初學者,并且內容也很精到。
除此以外,現(xiàn)在有很多輔助學習的軟件,畢竟現(xiàn)在是Window時代了,學習軟件多如牛毛,不象我們當初學習,只有讀書做題這么老套。我向大家推薦一個“集成學習環(huán)境(C語言)”,里邊的知識點總結和例程講解都非常好,還有題庫測試環(huán)境,據(jù)說有好幾千題,甚至還有一個windows下的trubo C,初學者甚至不用裝其它的編譯器,就可以練習編程了,非常適合初學者。還有一個“C語言學習系統(tǒng)”軟件,不過感覺只是一個題庫系統(tǒng),如果你覺得題做的不夠,不妨也可以試試。
2:葵花寶典
學習計算機語言最好的方法是什么?答曰:讀程序。
沒錯,讀程序是學習C語言入門最快,也是最好的方法。如同我,現(xiàn)在學習新的J#,C#等其他語言,不再是抱著書本逐行啃,而是學習它們的例程。當然,對于沒有學過任何計算機語言的初學者,最好還是先閱讀教程,學習完每一章,都要認真體會這一章的所有概念,然后不放過這一章中提到的所有例程,然后仔細研讀程序,直到每一行都理解了,然后找?guī)讉€編程題目,最好是和例程類似的或一樣的,自己試圖寫出這段已經讀懂的程序,不要以為例程你已經讀懂了,你就可以寫出和它一樣的程序,絕對不一定,不相信你就試一試吧,如果寫不出來,也不要著急,回過頭來再繼續(xù)研究例程,想想自己為什么寫不出來,然后再去寫這段程序,反反復復,直到你手到擒來為止,祝賀你,你快入門了。
3:登峰造極
寫程序的最高境界其實就是掌握各種解決問題的手段(數(shù)據(jù)結構)和解決問題的方法(算法)。
是不是寫出底層程序就是程序設計高手呢?非也,寫底層程序,無非是掌握了硬件的結構,況且硬件和硬件還不一樣,要給一個芯片寫驅動程序,無非就是掌握這塊芯片的各種寄存器及其組合,然后寫值讀值,僅此而已。這不過是熟悉一些io函數(shù)罷了。那么怎樣才算精通程序設計呢?怎樣才能精通程序設計呢?舉個例子:你面前有10個人,找出一個叫“張三”的人,你該怎么辦?第一種方法:直接對這10個人問:“誰叫張三”。第2種方法:你挨個去問“你是不是張三?”,直到問到的這個人就是張三。第三種方法:你去挨個問一個人“你認不認識張三,指給我看”。不要小看這個問題,你說當然會選第一種方法,沒錯恭喜你答對了,因為這個方法最快,效率最高,但是在程序設計中找到解決問題的最優(yōu)方法和你用的手段卻是考驗一個程序員程序設計水平的重要標志,而且是不容易達到的。剛才這個問題類似于數(shù)據(jù)結構和算法中的:Map數(shù)據(jù)結構,窮舉查找和折半查找。所以掌握好數(shù)據(jù)結構和一些常用算法,是登峰造極的必然之路。最后給大家推薦嚴尉敏的《數(shù)據(jù)結構》清華大學出版社,希望每一個想成為程序設計高手的人研讀此書。
二,語言學習方法
談談偶的學習方法,拋磚引玉!
學習不論講不講方法,最終都能學會。但是別人1個月學會了,而你卻100年才學會,這不就晚了么?:)所以說,學習還是要講究方法的。學習方法正確,事半功倍;學習方法不正確,事倍而功半。
什么才是學習C語言的捷徑?我的答案是看書。書中所寫,是前人數(shù)十年經驗所寫,看十本書,就相當于汲取了前人數(shù)十年的功力,那么你的內功也會迅速上升1甲子。:)書當然要看好書,只有好書才營養(yǎng)豐富。假如你花了1天時間看了一本破書,而該書介紹的知識雖然對于你來說是全新的知識,但是由于書中組織不當、或者深度不夠,使你獲取的營養(yǎng)很少,還不如自己研究一天來的快,這種書就不值當看了。學習C語言要看那些好書?我認為首先要把基礎書給看扎實了,比如《C語言之四書五經》中介紹的4本。(雖然這些書很多已經絕版了,但我相信電子版也是很有益處。況且,如果你真的想看,我相信你一定有辦法搞的到。)這些書你會在很短的時間內看完(比如一兩個月),這取決于你的基礎和悟性。之后要看那些書呢?我不妨再列幾本。Bjarne Stroustrup的《C++程序設計語言》(The C++ Programming Language)一定要看,這本書里面對于C的一些基礎概念的定義,比我見過的其他任何C語言書都要全,都要仔細;Bjarne Stroustrup的《C++語言的設計與演化》(The Design and Evolution of C++)和David R.Hanson 的《C語言接口與實現(xiàn) 創(chuàng)建可重用軟件的技術》(C Interfaces and Implaementations Techniques for Creating Reusable Software)一定要看,這兩本書講述了如何用C來實現(xiàn)異常處理、實現(xiàn)類型的封裝和擴展等一些大的項目中經常用到的高級技術。其他的書,操作系統(tǒng)的要看,編譯原理的要看,算法的要看,模式的也要看。讀書破萬卷,coding如有神。總而言之,就如《傳》中云:“生而知之者,上也;學而知之者,次也;困而學之又其次也?!蔽覀儾荒芸偸且蚶Ф鴮W之,而要做到兵馬未動,糧草先行。
看書是學習的導向,書中能一一介紹清楚概念,但書卻不能把應用的細節(jié)一一介紹給你,因為應用總是招數(shù)繁復,變化多端。因此我們要想熟悉招數(shù),懂得書中所講怎么使用,還要多讀源碼。Linus給別人解答問題的時候,常說Read the ****ing source code;候捷也在其文中提到“源碼之前,了無秘密?!边@就是大師的箴言呀。源碼就像是動畫、就像是幻燈片,把書中的招式一一演練給你看??梢哉f高手的經驗大都是源自代碼。源碼和書一樣,也是要看好的,不要看差的。在此,我推薦看Linux kernel source code 和 Linux tcp/ip source code。這兩套代碼都是開源的,垂手可得。此外,還可以配合著Andrew S.Tanenbaum的《操作系統(tǒng)的設計與實現(xiàn)》(Operating Systems:Design and Implementation)、毛德操 胡希明的《Linux內核 源代碼情景分析》、Jonathan Corbet,Alessandro Rubini,Greg Kroah-Hartman合著的《Linux設備驅動程序》(Linux Device Driver,3e)、W.Richard Stevens《TCP/IP詳解(3部)》(TCP/IP Illustracted)、W.Richard Stevens《UNIX環(huán)境高級編程》(Advanced Programming in the UNIX Environment,新版增加了Linux kernel的內容)等書來看,方便的很當然程序不是看出來的,是寫出來的。我高中的時候每天堅持寫6個小時程序,《數(shù)據(jù)結構》和排列組合、圖論方面的習題反復做了N遍。到現(xiàn)在雖然已經時隔五六年,很多內容早已淡忘掉,但卻培養(yǎng)了我很強的編碼能力和調試能力,直到現(xiàn)在還對我的工作有很大的幫助。
學習忌貪多、忌浮躁、忌急功近利、忌目中無人。把學習計劃放的長一些,培養(yǎng)一個好的學習方法,一步一步慢慢走,終能成為高手
下面是本人自己總結的方法。本人感覺只要你肯花時間。學好應該沒問題。
《C程序設計》的內容很豐富,一般選譚浩強老師編寫的教材,按照我們現(xiàn)在的教學大綱,教學的主要內容是基礎知識、四種結構的的程序設計、函數(shù)與數(shù)組的應用和一些簡單的算法。在學習時,同學們應該把主要精力放在這些部分,通過實踐(練習和上機調試等熟練掌握。當然,在初學C語言時,可能會遇到有些問題理解不透,或者表達方式與以往數(shù)學學習中不同(如運算符等),這就要求不氣餒,不明白的地方多問多想,鼓足勇氣進行學習,待學完后面的章節(jié)知識,前面的問題也就迎刃而解了,這一方面我感覺是我們同學最欠缺,大多學不好的就是因為一開始遇到困難就放棄,曾經和好多同學談他的問題,回答是聽不懂、不想聽、放棄這樣三個過程,我反問,這節(jié)課你聽過課嗎?回答又是沒有,根本就沒聽過課,怎么說自己聽不懂呢?相應的根本就沒學習,又談何學的好?
不要說在家里自己學看著書這種方法.個人覺得完全是自欺欺人.而且你沒有基礎根本就學不到什么東西.不管你多用功!這種東西必須先入門!這才是最快的方法.起電腦學校培訓去吧,他們教不到你什么東西,就是教你最快的入門跟編程基礎,真真的你想靠IT致富的話,起碼要有3年以上的工作經驗再說!出了學校門,找個IT公司進去當”苦力”.跟著老師傅做幾年項目,培養(yǎng)點工作經驗!能獨立完成業(yè)務了!你就離有房有車的日子不遠了!前提是你必須好好在單位搞幾年.
但是我沒有銀子,也沒有關系怎么快速入門。建議大家可以看著書加上詳細的視頻教程學習是目前最好的方法,主要省錢還高效??梢詮陌俣壤锩嫠阉鳌袄硐胍曨l教程網(wǎng)”,自我感覺這個網(wǎng)的內容學習起來還可以,講的比較系統(tǒng)。
最后,學習C語言始終要記住“曙光在前頭”和“千金難買回頭看”,“千金難買回頭看”是學習知識的重要方法,就是說,學習后面的知識,不要忘了回頭弄清遺留下的問題和加深理解前面的知識,這是我們學生最不易做到的,然而卻又是最重要的。比如:在C語言中最典型的是關于結構化程序設計構思,不管是那種教材,一開始就強調這種方法,這時也許你不能充分體會,但是學到函數(shù)時,再回頭來仔細體會,溫故知新,理解它就沒有那么難了。學習C語言就是要經過幾個反復,才能前后貫穿,積累應該掌握的C知識。下面是本人自己總結的方法。本人感覺只要你肯花時間。學好應該沒問題。
《C程序設計》的內容很豐富,一般選譚浩強老師編寫的教材,按照我們現(xiàn)在的教學大綱,教學的主要內容是基礎知識、四種結構的的程序設計、函數(shù)與數(shù)組的應用和一些簡單的算法。在學習時,同學們應該把主要精力放在這些部分,通過實踐(練習和上機調試等熟練掌握。當然,在初學C語言時,可能會遇到有些問題理解不透,或者表達方式與以往數(shù)學學習中不同(如運算符等),這就要求不氣餒,不明白的地方多問多想,鼓足勇氣進行學習,待學完后面的章節(jié)知識,前面的問題也就迎刃而解了,這一方面我感覺是我們同學最欠缺,大多學不好的就是因為一開始遇到困難就放棄,曾經和好多同學談他的問題,回答是聽不懂、不想聽、放棄這樣三個過程,我反問,這節(jié)課你聽過課嗎?回答又是沒有,根本就沒聽過課,怎么說自己聽不懂呢?相應的根本就沒學習,又談何學的好?
不要說在家里自己學看著書這種方法.個人覺得完全是自欺欺人.而且你沒有基礎根本就學不到什么東西.不管你多用功!這種東西必須先入門!這才是最快的方法.起電腦學校培訓去吧,他們教不到你什么東西,就是教你最快的入門跟編程基礎,真真的你想靠IT致富的話,起碼要有3年以上的工作經驗再說!出了學校門,找個IT公司進去當”苦力”.跟著老師傅做幾年項目,培養(yǎng)點工作經驗!能獨立完成業(yè)務了!你就離有房有車的日子不遠了!前提是你必須好好在單位搞幾年.
但是我沒有銀子,也沒有關系怎么快速入門。建議大家可以看著書加上詳細的視頻教程學習是目前最好的方法,主要省錢還高效??梢詮陌俣壤锩嫠阉鳌袄硐胍曨l教程網(wǎng)”,自我感覺這個網(wǎng)的內容學習起來還可以,講的比較系統(tǒng)。
最后,學習C語言始終要記住“曙光在前頭”和“千金難買回頭看”,“千金難買回頭看”是學習知識的重要方法,就是說,學習后面的知識,不要忘了回頭弄清遺留下的問題和加深理解前面的知識,這是我們學生最不易做到的,然而卻又是最重要的。比如:在C語言中最典型的是關于結構化程序設計構思,不管是那種教材,一開始就強調這種方法,這時也許你不能充分體會,但是學到函數(shù)時,再回頭來仔細體會,溫故知新,理解它就沒有那么難了。學習C語言就是要經過幾個反復,才能前后貫穿,積累應該掌握的C知識。
最近,老有的網(wǎng)友提問如何學習C語言,因此從網(wǎng)上搜索了一些文章,希望對大家有所幫助 & g-e& h8 G: V;q& R# J;V)p, s4 Q1 M“ l M
談及C語言,我想凡是學過它的朋友都有這樣一種感覺,那就是“讓我歡喜讓我憂?!睔g喜的是,C語言功能非常強大、應用廣泛,一旦掌握了后,你就可以理直氣壯地對他人說“我是電腦高手!”,而且以后若是再自學其他語言就顯得輕而易舉了。憂慮的是,C語言猶如“少林武功”一般博大精深,太難學了。其實就筆者認為C語言并非是“difficult(困難)”的,只要你能理清思路,掌握它的精髓,那么自學C語言是一件非常容易且又其樂無窮的事。今天本人就與大家一起談談如何學習C語言或者說學習C語言應從哪幾方面著手。/ E, r)N” ~)[ z6 e/ d' s-f* H4 @7 N!F1 N c 了解一些基本知識& t.m8 J6 A: w
.U5 K;S.G G“ G, ` 一.C語言的背景 5 I% : h0 q;{# s% h 7 ^+ L$ [& ]& T2 X' a/ } 就個人感觸,無論學習哪門語言首先應該了解一下自己所學語言的背景,也可以說它的發(fā)展史。
/ z# M” @)p.N6 }8 g& L/ v8 x-R/ {;C9 h+ P
C語言屬于高級程序語言的一種,它的前身是“ALGOL”。其創(chuàng)始人是布朗·W·卡尼漢和丹尼斯·M·利奇。C語言問世時是帶有很大的局限性,因為它只能用于UNIX系統(tǒng)上。然而隨著科學技術的進步,計算機工業(yè)的發(fā)展,C語言逐漸脫離UNIX。1987年美國標準化協(xié)會制定了C語言的國際標準,簡稱“ANSI C”,從此以后它便成為一種廣泛使用的程序語言。C語言的優(yōu)點很多,主要的有如下四點: / x+ S x% E6 S;J $ `.n3 J!^“ }1 |# N% I 1.兼?zhèn)涓呒壵Z言與低級語言的優(yōu)點,屬于一種中間語言。, u' W+ D& _8 O9 ^” |$ D8 a$ k 5 l* a;B: p!K0 N)`/ { 2.它是一種結構化程序設計語言,非常適合結構化程序設計。/ ]“ n8 k8 J” Y2 T)v!I0 n!{, ~
* w-t9 M1 W0 a.r 3.有較豐富的數(shù)據(jù)類型、運算符以及函數(shù)供以選用。+ i3 u1 m(K: n0 i8 L-b(t7 ]0 C6 N$ ?0 j1 e
4.直接與內存打交道,使修改、編輯其他程序與文檔變得輕松,簡單。9 V3 R+ K# w3 t/ I1 [: v$ n x' |(s$ L& T% F$ w 二.二大語系二種不同的學習方法7 ~# M V$ X“ M3 b2 s/ r: A.?3 c0 q0 ])A# O 筆者學習過很多程序語言,例如:C,C++(C語言的擴展),QBASIC,VB(BASIC的可視化),JAVASCRIPT,JSCRIPT,VBSCRIPT,JAVA,ASP,F(xiàn)OXPRO,PERL等等,就本人實踐所得,其實高級程序語言分為兩大語系。一路是以C為主的程序語言,例如:JAVASCRIPT,JAVA等,這類語言在函數(shù)的調用,程序語句的書寫,循環(huán)的控制都極為相似。另一路是以BASIC為首的程序語言,例如:FOXPRO,VBSCRIPT等,此類語言同樣具有相似的函數(shù)調用,程序語句書寫以及循環(huán)控制,但與C語系是不同的。因此若是您以前是從QBASIC起家的,那么在學習C語言前最好是先洗洗腦,千萬不要把學習BASIC的方法以及思路用在C身上。
!j' P4 y/ E2 L/ Q, t% F.r6 [-U9 G1 h& c
講到這里,我想大家對C語言一定有了感性認識吧!下面讓我們再升華一下,全方位親密接觸它。學習C語言必須從以下四點入手,也就是說,只要你能掌握這四點的內容,那么基本上就大功告成了。-]9 j% W: l, J!G5 Qj3 c” h7 a)i% { 1 K-`+ b% d: W M7 }& s 1.二維浮點數(shù)數(shù)組的輸入0 p!w3 y(G-T# x;V-}5 @ “ z6;V!_1 Y3 h0 ?& W
二維浮點數(shù)數(shù)組的輸入(即:通過鍵盤給二維浮點數(shù)數(shù)組賦值)在很多專業(yè)書中都沒有詳細講過這個問題。在給二維浮點數(shù)數(shù)組賦值時一定要先聲明一個變量,接著把數(shù)值賦予這個變量,最后把變量數(shù)值賦予二維浮點數(shù)數(shù)組賦值。實例如下: 0 Q* q(r8 V0 G)?” t& a* Y 3 C6 N-`5 R._;[(w5 ~% P# include “stdio.h”7 S6 U: C' T u0 G!g$ V)v main()# }% z3 ]7 G' r2 u7 E# }5 R8 J { % D9 H6 @3 }7 l-d: U# ? float a[2][3],x;0 M)w0 V0 o: |$ f)^ int i,j;' a: R7 m/ }% ~9 C for(i=0;i<2;i++)* z0 r% |: |, j!]
for(j=0;j<3;j++)4 D!f.|(C& I& M!H
{scanf(“%f”,&x);' }7 O4 e4 _9 j.U+ d
a[j]=x;} X: y.@7 `# s“ R7 C
}2 `6 K-m7 C4 R!f3 ^4 c1 D 不能寫成:!@4 K* O* _/ t' X% ^ s$ u+ b J% X” I1 h' W)x6 o# include “stdio.h” * % c' Q# H7 {4 |“ z% cmain()3 n6 w-d” C.x1 u& y* q: C& L4 } {1 f.j2 E4 A* O float a[2][3];* `!q“ t;R ^1 N+ z, y7 H int i,j;' I” [(t$ {.I5 F for(i=0;i<2;i++)5 m7 I/ I-B7 O.c# Q
for(j=0;j<3;j++)4 c3 J7 m5 T# D* C
scanf(“%f”,&a[j]);._(e8 {$ |(o } “ H.`, })U% q/ v: k 9 V8 }5 l& |)@* E b
同樣道理,在結構性浮點數(shù)組變量中也一定要按照這種格式輸入。實例如下: / h(E' j0 _.+ q& m2 L' N)l& q: N” w # include “stdio.h” 5 c.D2 R-g“ q q-_” Q struct student9 `+ Y/ R% G* G {float b[3];1 N+ w' a1 b9 G6 y$ S
int x;' g;e6 K7 S/ l-y% i6 z }a[2];2 ?4 V;}8 A6 E4 h& G% g5 z main()9 P, B/ x1 d5 [3 G/ U1 [ { { 9 ~9 r5 c: E# S9 z$ F float x;$ ~ n.I!Z0 N;o2 `1 t# z
int i,j;0 ^* G5 w7 h)`;y.} for(i=0;i<2;i++)$ I)B: K0 |+ T5 r
for(j=0;j<3;j++)' W: o0 ]2 d/ y* ~)i7 c7 M)i
{scanf(“%f”,&x);: y7 y+ E)S# J j“ w4 ]$ ~+ B
a.b[j]=x;} 5 x+ X;} R(f9 v3 p5 j
} 4 X.J3 Q;c” _.| T: s$ p* I
& E* q: Y3 I/ m-V,!x1 K 2.注意輸出格式中“%”后的字符 4 Q;1 y9 })L-x6 x4 }.Z5 L-W1 b-~5 o(y2 p2 k
C語言的輸出說復雜不復雜,因為常用的都很簡單??烧f不復雜也未必,記得曾在一次等級考前輔導我們C語言的教授講道:“如果C語言要考得很難的話,根本不用考什么指針,只要??驾敵龈袷?,我想百分之九十九的學生都不及格?!碑敃r我們無不認同。從這則事例中可以看出C語言的輸出格式之復雜程度。因此大家在學習它時千萬要學會辨別輸出格式中“%”后的字符,每個字符都有其意義,也都有其作用。8 P)D E% Z.L# J6 `# o : k* _* V(v+ `' H7 G7 Y“ ~ 二.優(yōu)先級 8 |% z4 q1 r: |: I)x4 B* Z# Y # E% L# e' f: s;說道優(yōu)先級,有很多朋友都不是很了解或說很模糊。為此筆者想先通過一個例子讓各位有個概念。什么叫優(yōu)先級?比方說,我們在公交車終點站排座隊時總會遇到70歲以上的老人不需要排隊就能上車的情景,這就是優(yōu)先級的涵義。C程序在運行時也象排隊坐車一樣,首先照顧那些優(yōu)先級高的運算符,若是優(yōu)先級相同,那么就象遇到兩位(或兩位以上)70歲以上的老人那樣,讓他們依次上車。但是C語言中的優(yōu)先級的運算并不是千篇一律的,只能說是在大多數(shù)情況下,有些運算符的優(yōu)先級有其自己的特點,因此這點大家要注意。例如條件表達式:條件?結果1:結果2,這種表達式很多朋友都知道,它的作用與IF?ELSE?條件判斷語句很雷同,它運算時的優(yōu)先級就不是按照C語言的規(guī)則來完成的。所以說對于優(yōu)先級各位編程愛好者一定靈活掌握,不要死記硬背。3 b5 f.q!^2 B: C4 E/ K
.u* O# D1 _9 t 三.指針
/ E;f4 a' I% S6 l!l-@(h' U+ A!V(]7 ]
就個人認為,C語言中的指針是最有特色的,當然也是最難學的。指針說穿了,其實是變量的一種表現(xiàn)形式,只不過這種變量記載的不是數(shù)值而是地址。就象一個人可以用姓名來表示自己,也可以用身份證號碼來表示自己一樣。筆者涉足編程已經有三年多了,在這期間曾經收到過很多網(wǎng)友的電子郵件詢問學習指針的方法。就本人感觸,學習指針最好是先學些計算機硬件工作的原理,例如:直接尋址,間接尋址等,只有了解了這些內容以后,你再學指針就比較容易理會,畢竟C語言是一門介于機器語言與高級語言中間的語言,沒有一些硬件工作知識是很難領悟它的真諦的。然而事事并非絕對,如果你沒有這些知識也不要緊,只要清楚知道以下筆者總結的二點再加上多練習便可: 6 |& t!K-}7 [ }4 a5 a” p& A+ Q(|* N
1.指針是地址變量:它的值有兩種:其一是地址,其二是內容。不同的表達方式可以取不同的值,這有點象一個家庭地址在不同的場合標識的人物也不同。例如:父母親在他們的單位所登記的家庭地址就代表他們自己,而你在學校中登記的同樣的家庭地址就代表你自己。% U5 J!Z1 _# T A;R: s W% }2 U w1 ](r& w6 A.o 2.指針是可以運算的,它的運算法則與變量是一致的。.A5 I' a w/ R+ p._.J& @4 N.B
' _-U' A/ h# s.d)f(^ k: v 另外,在編寫一個程序時,除非萬不得已,一般不要使用指針變量。因為指針是比較復雜的,用不好就“當機”。所以筆者建議各位對于指針只要能看懂就行,當然如果你是準備參加考試的就另當別論了。: N3 L, B5 }8 b/ ]% [ l9 O: B/ f2 q, K+ n;x$ ~9 d“ Z
& a' N' Q# K)t0 z# x+ [!M四.函數(shù)$ m7 L1 a4 l8 _, i' k
![8 A.s:;G1 h 雖說很多程序語言都有函數(shù)這一內容,但筆者覺得C語言的函數(shù)是最有魅力的。如果你能完全掌握C語言的函數(shù),那么學習C++就不成問題了(C++是一門建立在C語言上,但又不同于C語言的高級程序語言,它增添了很多函數(shù)。)。學習函數(shù)的方法是比較簡單的,只有兩個字“牢記”,即:牢記函數(shù)的功能,牢記函數(shù)的用途以及如何輸入輸出。有些朋友認為,程序語言中的函數(shù)沒有多大用處,其實這并不正確,函數(shù)從本質上講是一段通用程序,用它可以幫助我們節(jié)約很多編程的時間,一個聰明的編程者在編寫程序前往往總是先找自己所編寫的程序中有多少是可以用函數(shù)來代替的。筆者曾經作過一個比較字符串的實驗,用C語言中的strcmp()函數(shù)只要一句話,而自己編寫的話30句話都擺不平,可想而知函數(shù)是多么實用呀!, e' O7 d, C1 E5 ^6 y!G 3 ]0 l9 g' ~2 n1 B(V 寫到這里筆者該告一段落了,下面送一個本人自己用C 語言編寫的注冊表比較程序給諸位。此段程序的注釋請看“/*?*/”后的文字,程序運行時(在DOS模式下)輸入的方式如下:compare xx1.reg xxx2.reg xxx3.txt,注意字段與字段之間是有空格的。(compare是程序名), c/ z3 N/ n0 S5 ] }2 H: g;R!l!w, s2 L0 Q6 J
程序代碼:
” s: : C, N.X2 }+ ?.l!^5 u% ], {8 r(