如果C是你學習的第一門語言,並且沒有計算機基礎知識(如微機原理)的話,那麼這個真的會比較難。我的學習過程是先學了(x86)微機原理和彙編,然後是C,後面才是其他高階語言和framework。學習C只有一個原因,在彙編裡面做格式化輸出(printf)實在是太TM不方便了。由於有紮實的彙編基礎,C對我沒有造成任何障礙。正相反,我現在看C(包括C++)的原始碼都是一眼看到編譯器產生的(未最佳化過的)彙編。舉個例子,C中有3種記憶體,stack, heap, global,這些東西對於彙編都是浮雲。x86指令有7種記憶體定址方式,其實學通了,都一樣。順便說一下,大多數C編譯器產生的彙編,只會用到3種定址方式,直接定址,基地址定址,變址定址。還有一點,很多初學者分不清C的兩個概念,申明和定義(declaration/definition)。其實這兩個東西存在的原型是為了彌補編譯器的缺陷。現在很多需要已經沒有這個需求了,如C#。知其然又能夠知其所以然,是學習任何知識的好方法。其他的方面,就自由發揮吧,能夠適合自己的,才是最好的。林語堂所謂,基因裡面的文字因人而異。
如果C是你學習的第一門語言,並且沒有計算機基礎知識(如微機原理)的話,那麼這個真的會比較難。我的學習過程是先學了(x86)微機原理和彙編,然後是C,後面才是其他高階語言和framework。學習C只有一個原因,在彙編裡面做格式化輸出(printf)實在是太TM不方便了。由於有紮實的彙編基礎,C對我沒有造成任何障礙。正相反,我現在看C(包括C++)的原始碼都是一眼看到編譯器產生的(未最佳化過的)彙編。舉個例子,C中有3種記憶體,stack, heap, global,這些東西對於彙編都是浮雲。x86指令有7種記憶體定址方式,其實學通了,都一樣。順便說一下,大多數C編譯器產生的彙編,只會用到3種定址方式,直接定址,基地址定址,變址定址。還有一點,很多初學者分不清C的兩個概念,申明和定義(declaration/definition)。其實這兩個東西存在的原型是為了彌補編譯器的缺陷。現在很多需要已經沒有這個需求了,如C#。知其然又能夠知其所以然,是學習任何知識的好方法。其他的方面,就自由發揮吧,能夠適合自己的,才是最好的。林語堂所謂,基因裡面的文字因人而異。