电竞比分网-中国电竞赛事及体育赛事平台

分享

C語言學(xué)習(xí)隨筆

 dadac123 2007-01-27
 

C語言學(xué)習(xí)隨筆

 

    剛剛開始學(xué)習(xí)軟件不久,雖然自己正在北京的北大青鳥新興橋培訓(xùn)中心上課,并且學(xué)習(xí)了C語言的基礎(chǔ)知識(shí),但是和實(shí)際工作中需要具備的知識(shí)層面還是差距很大,很多深層次的知識(shí)還是要自己進(jìn)行儲(chǔ)備。二學(xué)期的課程該開始學(xué)習(xí)C++的內(nèi)容了,估計(jì)會(huì)對(duì)C語言的靈活運(yùn)用起到一定的幫助,也希望能對(duì)以前的學(xué)習(xí)領(lǐng)會(huì)更深層次一點(diǎn)兒。

    在這里將自己學(xué)習(xí)C語言過程中遇到的一些問題和應(yīng)該注意的內(nèi)容記錄下來,也對(duì)自己的學(xué)習(xí)思路作一下整理,如果能給其他網(wǎng)友帶來一定的幫助的話,那應(yīng)該是一件讓我非常高興的事情了

一、C程序一般遵循的習(xí)慣

1、習(xí)慣上,將主函數(shù) main()放在程序文件的最前面,而其它函數(shù)只在其前面進(jìn)行聲明。

2、對(duì)所有要求成對(duì)出現(xiàn)的符號(hào),如“{}”、“()”、“/* */”等,在輸入時(shí),均成對(duì)輸入,然后再在其中插入需要的內(nèi)容,這樣可以避免遺忘,減少不必要的程序調(diào)試。

3、習(xí)慣上,變量名及函數(shù)名使用小寫,而字符常量使用大寫。

4、盡量選擇具有含義的英文單詞作為變量名及函數(shù)名,這樣對(duì)程序的維護(hù)非常有好處,能不使用縮寫盡量不要使用縮寫,即使采用縮寫,也要做到可以望文生義。

5、良好的習(xí)慣:在雙目運(yùn)算符的左右兩側(cè)各加一個(gè)空格,可以增強(qiáng)程序的可讀性。

6、為了使程序具有良好的可讀性并減少出錯(cuò),凡不要求返回值的函數(shù),都應(yīng)定義返回為空(void),即使函數(shù)類型為整型,也不使用系統(tǒng)的缺省處理(系統(tǒng)缺省會(huì)返回一個(gè)不確定的值)。

如:void function(void)

{

    /****函數(shù)體****/

}

7、使用懸空指針很容易破壞系統(tǒng),所以要避免。

8、全局變量可以作為函數(shù)之間傳遞參數(shù)的一個(gè)手段,但是全局變量太多時(shí),會(huì)使內(nèi)存開銷變大,并且,全局變量在同時(shí)操作時(shí)會(huì)出現(xiàn)問題,所以,應(yīng)該盡量少使用全局變量。

9、盡量避免在混合表達(dá)式中使用自加或者自減運(yùn)算是寫程序的良好習(xí)慣,因?yàn)橛行┉h(huán)境下是右結(jié)合性,有些環(huán)境下卻是左結(jié)合性,這樣會(huì)造成運(yùn)算結(jié)果的不確定性。

10、在寫浮點(diǎn)常量時(shí),最好還是將它們寫成帶小數(shù)點(diǎn),即使該浮點(diǎn)常量取的是整數(shù)值,因?yàn)檫@樣可以強(qiáng)調(diào)其浮點(diǎn)性,便于別人閱讀。

二、在編寫C語言程序時(shí)應(yīng)該注意的一些問題

1、加分號(hào)(;)與不加分號(hào)。

1)在C語言中,分號(hào)代表一條語句的結(jié)束,所有語句必須以分號(hào)結(jié)束,即使是最后一條語句也不例外。

2)這里一定不要忘記加分號(hào)。

  do

  {

      /*循環(huán)體*/

  }while(循環(huán)條件);  //是這里了:)

 

3)宏定義部分不能加分號(hào)。

如:#incllude <stdio.h>

  

   #define SUCC 0

  

   #ifndef _FUNC_H

   #define _FUNC_H

   #endif

  

4)函數(shù)的說明部分不可以加分號(hào)。

如:int function(int)  //注意:這里沒有分號(hào)

   {

        函數(shù)體;

   }

5)這里也沒有分號(hào):

  for(i=0;i<10;i++ )  //小括號(hào)的后面

  while(num<10)  //這里也一樣沒有

6)不要混淆:

  while(循環(huán)條件); 

  注意:這里的分號(hào)是指while循環(huán)的循環(huán)體是一個(gè)空語句,當(dāng)然這種寫法很不好,但是沒有錯(cuò)誤。

7)還有就是if()、switch()等語句的小括號(hào)后面都不能加分號(hào)。

2、標(biāo)識(shí)符

1)

   C語言的標(biāo)識(shí)符必須以字母或下劃線開頭,并且由字母、數(shù)字和下劃線組成。

   關(guān)鍵字有系統(tǒng)保留,不能作為變量名。

   標(biāo)識(shí)符的有效長(zhǎng)度因系統(tǒng)而異。

   C語言對(duì)大小寫敏感。

2)通用規(guī)則:在所以可以使用某個(gè)類型的變量的值的地方,都可以使用該類型的更復(fù)雜的表達(dá)式。

3、系統(tǒng)在存儲(chǔ)字符串時(shí),會(huì)自動(dòng)加上一個(gè)‘\0‘作為字符串的結(jié)束符,因此,一個(gè)字符串在存儲(chǔ)時(shí)要比實(shí)際多占用一個(gè)字節(jié)空間。

4、強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換,只是得到一個(gè)所需要的中間量,而被要求進(jìn)行強(qiáng)制轉(zhuǎn)換的原表達(dá)式的類型并不發(fā)生變化。

5、在C語言中,整形和字符型數(shù)據(jù)可以互相轉(zhuǎn)換輸出,系統(tǒng)首先求該數(shù)與256的余數(shù),然后將余數(shù)作為ASCII碼轉(zhuǎn)換成相應(yīng)的字符輸出。

6、switch(表達(dá)式)

  這里的“表達(dá)式”,只可以是int,char或枚舉類型中的一種。

7、break語句和continue語句

1)break語句只對(duì)循環(huán)和switch語句有效,continue語句只對(duì)循環(huán)語句有效。

2)循環(huán)嵌套時(shí),break和continue語句只影響包含它們的最內(nèi)層循環(huán),與外層循環(huán)無關(guān)。

8、數(shù)組

1)數(shù)組定義中的“下標(biāo)表達(dá)式”的值表示數(shù)組中的元素個(gè)數(shù),而并不是數(shù)組的最大元素的下標(biāo)。

2)數(shù)組元素的下標(biāo),是元素相對(duì)于數(shù)組起始地址(首地址)的偏移量,所以從0開始順序編號(hào)。

3)數(shù)組名中存放的是一個(gè)地址常量,它代表整個(gè)數(shù)組的首地址,即數(shù)組中第一個(gè)元素的地址。同一個(gè)數(shù)組中的所有元素,按其下標(biāo)順序占用一段連續(xù)的存儲(chǔ)單元。

4)C語言不允許動(dòng)態(tài)定義數(shù)組。

如:int array[];

   char s[];

   都是錯(cuò)誤的,編譯檢查無法通過。

5)C語言系統(tǒng)不自動(dòng)檢測(cè)數(shù)組元素的下標(biāo)是否越界,因此,程序員保證下標(biāo)不越界是很重要的?。。。?!

9、C語言規(guī)定函數(shù)定義不允許嵌套,即在一個(gè)函數(shù)的函數(shù)體內(nèi),不能再定義另一個(gè)函數(shù)。

10、如果函數(shù)沒有return語句,并不是代表函數(shù)不返回值,而是返回一個(gè)不確定的值。所以為了明確表示不返回值,可以用void定義。

11、指針和指針變量

1)一個(gè)變量的地址即稱為該變量的指針,通過變量的指針能夠找到該變量。

2)專門用來存儲(chǔ)其它變量地址的變量稱為指針變量。

3)指針變量本身有自己的地址,這和其它類型的變量沒有區(qū)別。但是,指針變量只能用來存放地址。

4)指針聲明時(shí)的"*"和指針運(yùn)算符的"*"是兩個(gè)截然不同的概念。

12、"&"和"*"運(yùn)算符

1)"&"運(yùn)算符是一個(gè)返回操作數(shù)地址的單目運(yùn)算符

2)"*"運(yùn)算符是對(duì)"&"運(yùn)算符的一個(gè)補(bǔ)充,它返回位于這個(gè)地址內(nèi)的變量的值,也是單目運(yùn)算符。

13、數(shù)組與指針有密切關(guān)系。數(shù)組名本身就是該數(shù)組的指針,反之,也可以把指針看成一個(gè)數(shù)組。數(shù)組名和指針實(shí)質(zhì)上都是地址,但是,必須注意,指針是變量,而數(shù)組名是常量。

如:int array[10],*p;

   p=&a;

   p++;  //正確,因?yàn)閜是變量,可以進(jìn)行自增運(yùn)算

   a++;  //錯(cuò)誤,因?yàn)閍是常量,不能進(jìn)行自增運(yùn)算

14、scanf()的問題

   當(dāng)使用多個(gè)scanf()函數(shù)連續(xù)接收多個(gè)字符變量輸入時(shí),會(huì)存在scanf()函數(shù)將"空格"或"回車"符接收進(jìn)來的情況,而使字符變量?jī)?nèi)存入了我們不需要的值。

   對(duì)于這個(gè)問題,可以有如下的解決方法:

1)scanf("  %c",ch); //在"%c"的前面故意留一個(gè)空格

 

2)scanf("%c",ch1);

  fflush(stdin);  //加入一行清除輸入緩沖的操作

  scanf("%c",ch2);

15、結(jié)構(gòu)變量名不是指向該結(jié)構(gòu)的地址,這與數(shù)組名的含義不同。因此,若要取結(jié)構(gòu)中第一個(gè)成員的地址,應(yīng)表示為:

   &[結(jié)構(gòu)變量名]。

16......

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多