| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1688 人关注过本帖
标题:C语言要怎么来学
只看楼主 加入收藏
strivelong87
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:68
专家分:159
注 册:2011-11-24
收藏
得分:0 
这个过程好难的啊
2012-01-10 19:55
a824366984
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-6-20
收藏
得分:0 
回复 11楼 strivelong87
给点具体的建议,单单两个字好难什么意思。你们是怎么学的

eq=1  iq=99
2012-01-10 20:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不管是自然語言還是計算機語言,語言教材只是教會你語法,但沒有教你如何寫文章。能運用語言才算學會,把自己的意圖用語言表達、實現出來,不是抄人的,也不是人家佈置作業、題目你去完成,而是自己完成課題。完成課題和單純的做題目,差別很大,你做過課題的話,應該知道。

授人以渔,不授人以鱼。
2012-01-10 20:43
yanjingKS
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2012-1-10
收藏
得分:1 
你要理解它的原理和精神,书上讲的只是语法而已。语法是死的,精神才是活的。活的东西才能让你的创造力提升,才能让你按照自己的方式去应用。
2012-01-10 21:55
午夜飞奔
Rank: 1
等 级:新手上路
帖 子:14
专家分:1
注 册:2012-1-5
收藏
得分:1 
厉害,我看懂看不懂
看来我的问题比你的还要多
2012-01-10 21:55
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:1 
认真对待K&R the c programming language 中的习题,会有很大进步的,我觉得

The quieter you become, the more you can hear
2012-01-11 01:19
a824366984
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-6-20
收藏
得分:0 
回复 14楼 yanjingKS
你说的太虚了,说点实际的。具体的。具体怎么从新手去学

eq=1  iq=99
2012-01-11 20:16
a824366984
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-6-20
收藏
得分:0 
回复 13楼 TonyDeng
那你说该怎么做?怎么去学。具体点说说

eq=1  iq=99
2012-01-11 20:17
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
關鍵在理論,而理論的基礎在“模型”,也叫“假說”,任何學科都一樣。

比如數組。在C語言中,數組屬於一種叫“內置數組”的概念,在模型上,是一列火車,每節車廂就是數組的一個元素。內置數組有兩個基本點,第一是每個元素都是相同的數據類型,第二元素都是緊密相鄰的(非緊密相鄰的則是所謂的鏈表)。數組的長度,在數組建立時就固定下來了,猶如火車的車廂數,上路後就不可能再變動了。如果要增減數組元素的個數,是不能簡單地加掛和砍除的,因為火車在路上,前後都可能已經有別的車輛在運行,未必有空間讓你隨便加掛車廂。因此,要改變數組的長度,正常的做法是尋找足夠大小的新空間,然後把原來的東西搬過去,再在剩餘的空間上分配新的內容,顯得數組的尺寸改變了——因此,realloc()之類函數的結果,是數組的入口地址可能會改變。如果不明白這個模型,可能就完全不知道這樣做的危險性在哪裡,甚至無法理解realloc()會改變數組地址的事實,更別說使用之後要整理所有涉及的指針了。然而,一旦你明白這個模型,那麼在編程時,很自然就能想到有可能發生問題,從而預先測試、試探、證實設計的方案。這些東西,是僅僅學習具體使用技術無法教會你的,那樣只能是教一招懂一招,不知其所以然,終究還是被動。

再如指針,那其實就等於是一道光線,指向某個目標而已。聲明一個指針,只是宣佈有這麼一道光線將會投入使用,但它具體指向哪裡,要靠初始化和賦值來確定,對象消失了,光線儘管仍然指向原來的位置,但已不可能再假定原來的殘骸仍在,這個地方可能已經被操作系統安排了其他的東西進去,這樣指針就成了野指針。同樣,可以有多道光線指向同一位置,但只要這個位置的對象消失,那麼這些指針就同時失去目標,C指針程序員的麻煩,是難以記憶自己使用了多少指針指向這個位置。須知,對象沒有了,但指針仍在,在這個函數釋放了的對象,在別的函數未必知道,但又用了指向它的指針。也就是說,如果你明白這些道理,那麼以後編程時,該注意什麼問題,自己心中有數了。

書本可以教你這些道理,但沒有教你具體在一個程序中如何規劃整個佈局,這首先要靠經驗,其次要在看語法書之外,再看一些軟件工程的理論。光寫代碼是不夠的。

授人以渔,不授人以鱼。
2012-01-11 21:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
C語言的設計者在設計這門語言時,面向的程序架構本身是小型的,Unix內核的設計規劃不過是10000行代碼(後來用9600多行實現),可見這門語言的應用主要在這個幅度上。當今確實很多大型程序(系統)是用C寫的,但那主要得益於了模塊化,把系統化解為一個一個小型程序來實現、組合,在各個模塊中,C就可以滿足需求了。因此,C語言的特性是受它的應用目標決定的,並非說那些緊湊的、靈巧的代碼是什麼優勢,而是不得不如此,如果你學這門語言,思維被它過分牽制,那麼是寫不出大型程序的。這就是有人覺得學了C之後也仍然只能寫些小打小鬧程序的原因。當然,如果你有另外的程序設計經驗,那麼反過來用C輔助實現一些微型的、與系統緊密結合的功能,那C絕對是個好工具,但若妄想完全用C做整個龐大的系統,那是不現實的。

這門語言的很多方面,本來就不打算被這樣規模的應用使用。C語言的一個基本假設,是程序員很瞭解自己在做什麼,這樣,語言本身就不做什麼,完全交給程序員自己打理,連越界檢查都不做。所以,你不要看到C的代碼很精巧,就說C比其他語言都優越,卻不知道這種精巧其實是作了假定,這個假定是使用的人不會犯錯,然而事實並非如此。一個打算交給別人使用的程序,就必定有“愚蠢”的用戶刻意測驗你的程序穩健性的可能。scanf()函數就最典型的例子,這個函數假定程序員書寫的格式字符串與讀入的數據真能吻合,所以編譯器是無法給出不匹配檢查的,但幾乎所有初學者都在這個函數上栽了無數次,就是這個原因。

優勢和劣勢必定是相依相伴的,最強處也必定是最弱處,這點哲學道理最好能有所領悟。C的快速優勢是用捨棄很多必要工作換取來的,到底哪樣更重要,視你的真實應用情景而定。

授人以渔,不授人以鱼。
2012-01-11 22:10
快速回复:C语言要怎么来学
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022516 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved