零基礎如何快速精通C語言?要注意什麼?

2022-08-27 22:18:25 字數 2732 閱讀 6713

精通c語言是有難度的,卻也不是沒有方法。

首先,記憶體意識。

c語言和其他高階語言不一樣,它的很多操作都是直接面向記憶體(面向硬體)。

困難的是,對於c語言,不論是資料型別、操作符、語句、函式,都或多或少、或簡單或複雜地通過位址操作記憶體。

幸運的是,一旦掌握記憶體,**功能會非常強大,執行效率非常之高。

舉個例子。

如何把乙個二進位制數轉換成十進位制以字元的形式輸出?

做過十進位制位數分離的程式設計師都知道,可以採取「模10再除10」的方法把乙個二進位制數按十進位制分離每一位。

嘗試著去理解下面的程式。

while(putchar(value % 10 + '0') && (value /= 10))

putchar()函式的原型是int putchar(int ch);執行結束返回1。

這個**風格已經算優質了,只不過這樣是倒序的,想要實現正序排列可以使用遞迴。

void binary_to_ascii (unsigned int value)

unsigned int quotient;

quotient = value / 10;

if(quotient != 0)

binary_to_ascii(quotient);

putchar(value % 10 + '0');

但是當你明白了字串常量的原理後,你可能會寫出這樣不平凡的**。

while(putchar( "0}" [value % 10] ) && (value /= 10))

這是因為,乙個字串常量儲存在記憶體的某一位置,呼叫它的時候,並沒有把整個字串傳遞進去,而是只傳遞乙個指標常量(乙個位址),然後執行和陣列相同原理的下標引用。沒錯,你可能猜到了,也猜對了,陣列名也是乙個指標常量。

其次,掌握原理。

掌握哪些原理?資料型別、操作符是重點。

典型的,指標、陣列、結構體、一些重點操作符。

以操作符為例:

++操作符:a++和++a它們的機制分別是什麼?

a++:我們稱為後++,首先a生成乙份拷貝,然後a執行++,最後返回拷貝。返回的拷貝值是舊a,新a已經執行了++操作。

++a:我們稱為前++,首先a執行++,然後a生成乙份拷貝,最後返回拷貝。a先執行++,再拷貝,返回的拷貝就是新a。

如何理解拷貝?簡單學習組合語言,了解機器內部的運算方式,就可以理解。

&&和||操作符:先執行左表示式,再執行右表示式,如果左表示式就能確定整個結果,則不執行右表示式。

如果你知道while語句和scanf()、putchar()的原型,那麼下面這個語句將不難理解。

while(scanf("%d", ch) && ch != eof)

putchar(ch);

scanf()換成getchar()也可以,這裡只是想提醒大家scanf()的原型。

如果你足夠理解for語句和表示式,看下面這個**。

int a[n], *vp;

for(vp = a; vp < &a[n]; ){

*vp++ = 0;

這個**有兩個問題:功能是什麼?是否有錯誤?

第乙個問題:功能是實現陣列的初始化。

第二個問題:沒有錯誤。其一,&a[n],指向陣列外,指向並不會有錯誤,但是不能執行間接訪問,即*vp=a[n]是非法的。其二,for語句,括號內需要三個表示式,最後乙個不寫,表示空表示式,空表示式也是表示式。

最後,清晰概念。

什麼是預處理、什麼是表示式、什麼是語句、什麼是函式、什麼是操作符、什麼是資料型別。

只有真正能區分它們的不同,你才能理解各種複雜的**。

p=&a和*p=&a,在一定的語句下,都可以是正確的,它們又有什麼不同?

什麼是宣告、什麼是定義、什麼是呼叫。

它們作用於不同的資料型別是否有本質上的區別。

比如說,宣告乙個變數,就要分配記憶體。宣告乙個結構體,不會分配記憶體,只有定義乙個實體的時候,才分配。它們的實現原理不同,具體使用就會有細微的差別。

什麼是常量、什麼是變數、什麼是指標常量char * cnost f、什麼是常量指標char const *f、什麼是指標函式char *f()、什麼是函式指標char (*f)(),等等。

區分它們,只有乙個辦法,掌握操作符優先順序,變數f先和什麼結合,f就是什麼,前面剩下的,就是返回型別。

char * cnost f:f是常量,並且是指標,返回型別為普通的char。指標常量,指標的值不能變,指標指向的資料可變,比如陣列名。

char const *f:f是普通的指標,返回型別是char const。指標的值可變,指標指向的資料不能變。常量指標,面向介面程式設計常用的方法。

char *f():()的優先順序比*高,所以f是乙個函式,返回型別是乙個char型指標,返回型別為指標的函式。指標函式,動態分配記憶體的好方法。

char (*f)():同為(),優先順序相同看結合性,自左向右。f是乙個指標,指向乙個返回為char型的函式。函式指標,**函式的實現方法。

掌握了上面的知識就能精通c語言麼?

顯然是遠遠不夠的,我只是從我的角度總結了幾個方面,給出一些建議。

而真正要做到精通,只有不斷的學習。

零基礎學雲計算要注意什麼 該怎麼快速入門

零基礎學雲計算要注意什麼?該怎麼快速入門?雲計算是當前網際網路領域最火爆的技術之一,應用領域廣泛,從業人員薪資待遇好。很多專業或非專業,有基礎或者零基礎的人都想加入這個行列實現高薪,下面一同來看看吧。零基礎學習雲計算應該注意什麼?首先,用心。世上無難事只怕有心人,如果你無法全身心的投入學習,那就很難...

零基礎學Python需要注意些什麼?

雖然國內開設python的大學並不是很多,但python的地位同樣無可取代的,python是現在各大領域中,非常重要的語言之一,也被叫做膠水語言,跟其他的程式設計對比,優勢更加明顯。而且對於零基礎學習程式語言的人來說,python是最合適的選擇,說那麼多,還是開始正題,學習python需要哪些具備哪...

零基礎學習C C 需要注意的地方

談及c c 功能強大 應用廣泛,一旦掌握了後,若是再自學其他語言就顯得輕而易舉了。那為什麼學c c 的人少呢?很多人認為c c 雖然博大精深,但也難學。其實就本人認為c c 並程式設計客棧非是 difficult 困難 的,只要你能理清思路,掌握它的精髓,配合一套教材。那麼學c c 是一件非常容易且...