激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频

學(xué)習C語(yǔ)言指針應注意的幾個(gè)問(wèn)題

時(shí)間:2024-10-24 19:44:02 計算機畢業(yè)論文 我要投稿
  • 相關(guān)推薦

學(xué)習C語(yǔ)言指針應注意的幾個(gè)問(wèn)題

  摘要:指針是C語(yǔ)言中的一個(gè)重要概念。指針的引入增強了C語(yǔ)言的靈活性和高效性,同時(shí)由于指針的用法過(guò)于靈活也使得初學(xué)者經(jīng)常感到難以駕馭,甚至經(jīng)常出現理解錯誤和應用錯誤。本文對學(xué)習C語(yǔ)言指針應注意的幾個(gè)問(wèn)題進(jìn)行了探討。

學(xué)習C語(yǔ)言指針應注意的幾個(gè)問(wèn)題

  關(guān)鍵詞:指針 C語(yǔ)言 空指針

  指針的引入增強了C語(yǔ)言的靈活性和高效性,同時(shí)由于指針的用法過(guò)于靈活也使得初學(xué)者經(jīng)常感到難以駕馭,甚至經(jīng)常出現理解錯誤和應用錯誤。筆者認為初學(xué)C語(yǔ)言指針應注意以下幾個(gè)問(wèn)題。

  一、正確理解定義指針基類(lèi)型的必要性

  指針變量是存放地址的,但在定義指針變量時(shí)必須指明其基類(lèi)型。例如:對指針變量p的定義(char * p;)這里的char即是指針變量p的基類(lèi)型,也就是說(shuō)定義p為指向字符型數據的指針類(lèi)型。

  在定義指針時(shí)指明其基類(lèi)型是非常有必要的。雖然C語(yǔ)言中允許定義通用指針類(lèi)型(*void類(lèi)型),但這種通用類(lèi)型應被理解為指向空類(lèi)型的數據或不能指向確定類(lèi)型的數據,而不應被理解成可以指向任何類(lèi)型的數據。在具體使用通用類(lèi)型的指針時(shí)一般要通過(guò)顯式強制類(lèi)型轉換將其轉換成一個(gè)有確定類(lèi)型的指針。例如,在C語(yǔ)言中通常利用malloc函數(該函數的原型為:void* malloc(unsigned int size);)來(lái)實(shí)現內存的動(dòng)態(tài)分配。該函數的返回值就是一個(gè)通用型指針,該指針不指向任何特定數據類(lèi)型的數據,它只是返回malloc函數所分配的內存空間的第一個(gè)字節的地址。在真正利用這段內存空間存儲數據時(shí),一般還要通過(guò)顯式強制類(lèi)型轉換將其轉換成一個(gè)有確定類(lèi)型的指針,例如:p=(int*)malloc(100*sizeof(int)),這樣就在內存中開(kāi)辟出了能存放100個(gè)整型數字的空間,而基類(lèi)型為整型的指針p指向這段內存空間的第一個(gè)字節。

  C語(yǔ)言初學(xué)者普遍存在一個(gè)疑惑,那就是既然指針變量中存放的是內存地址,為什么還要設定類(lèi)型,內存地址只不過(guò)是一個(gè)數字難道還有類(lèi)型之分嗎?必須為指針變量設定類(lèi)型的原因有二。(1)不同數據類(lèi)型的數據在內存中占據的存儲空間的大小不同,比如一個(gè)整型數需要占用4個(gè)字節而一個(gè)字符只需占用1個(gè)字節。如果不指定指針的類(lèi)型,通過(guò)指針引用該指針所指向的變量時(shí),就無(wú)從知道應該取從該指針所指向的內存地址開(kāi)始的幾個(gè)字節的數據;(2)在指針進(jìn)行加減運算時(shí),如果不指定指針的類(lèi)型,就無(wú)法判斷指針具體應該加減的數值。例如int * p;p++;這里指針p的值加1,實(shí)際上意味著(zhù)指針p中存儲的地址值要加4,因為一個(gè)整型數在內存中要占據4個(gè)字節的存儲空間。這里如果不指定指針p的類(lèi)型,就無(wú)法判斷指針p中存儲的地址值具體應該加減的數值。

  二、正確理解空指針

  空指針不指向任何對象。應特別注意空指針并不是指*void類(lèi)型(通用指針類(lèi)型)的指針。把一個(gè)指針定義為空指針通常采用給其賦值為NULL的方式(例如int * p;p=NULL;)。在使用malloc函數動(dòng)態(tài)分配內存時(shí),如果返回值是NULL則意味著(zhù)該函數執行失敗,原因一般是由于內存空間不足,無(wú)法分配malloc函數所要求數量的內存空間(例如:int * p;p=(int*)malloc(1000000000000*sizeof(int));)。

  NULL的本質(zhì)即為常數0,在C語(yǔ)言編譯器的頭文件stdio.h或stddef.h中把NULL以宏的形式定義為常數0,也就是說(shuō)int*p;p=NULL;與int*p;p=0;是等效的。

  在C語(yǔ)言中對一個(gè)值為NULL的指針變量進(jìn)行間接訪(fǎng)問(wèn)操作是非法的。例如,運行如下程序由于對值為NULL的指針變量進(jìn)行了間接訪(fǎng)問(wèn),將會(huì )導致程序終止。

  #include

  void main()

  {int*p; p=NULL; printf("%d",*p);}

  三、注意指針變量賦值的類(lèi)型匹配原則

  對任何類(lèi)型的變量賦值都應遵循類(lèi)型匹配的原則,給指針變量進(jìn)行賦值時(shí)賦值運算符兩邊的類(lèi)型往往不容易準確辨識,所以更容易犯賦值類(lèi)型不匹配的錯誤,故而在對指針變量進(jìn)行賦值時(shí)應認真檢查賦值運算符左右兩側類(lèi)型是否匹配。例如int*p,a[10];p=&a;中a作為數組名本身就代表數組首元素的地址即&a[0],在a前由加了一個(gè)去地址符&就導致表達式p=&a;賦值運算符左右兩側類(lèi)型不匹配。

  另外需要注意雖然指針變量是存放地址值的,但不可以將具體的數字賦值給指針變量,例如int*p,p=0x1234cdef;在編譯時(shí)會(huì )給出“cannot convert from 'const int' to 'int *'”的錯誤提示。但有一個(gè)例外,可以將0賦值給指針變量,例如int*p, p=0;,這里是將p定義為空指針,以上語(yǔ)句相當于int*p, p=NULL;。

  參考文獻:

  [1] Kenneth A. Reek著(zhù),許波譯.C和指針[M].北京:人民郵電出版社,2008.

  [2] 譚浩強.C程序設計(第四版)[M].北京:清華大學(xué)出版社,2010.

【學(xué)習C語(yǔ)言指針應注意的幾個(gè)問(wèn)題】相關(guān)文章:

論文答辯應注意的幾個(gè)問(wèn)題11-18

使用虛擬語(yǔ)氣應注意的幾個(gè)問(wèn)題03-07

淺談農村家庭養羊應注意的幾個(gè)問(wèn)題03-17

淺談善意取得制度中應注意的幾個(gè)問(wèn)題03-02

談?dòng)⒄Z(yǔ)詞匯教學(xué)應注意的幾個(gè)問(wèn)題03-19

道路改造工程施工中應注意的幾個(gè)問(wèn)題03-07

畢業(yè)論文答辯技巧及應注意的幾個(gè)問(wèn)題11-27

淺談中學(xué)文言文教學(xué)應注意的幾個(gè)問(wèn)題03-07

本科生畢業(yè)設計中應注意的幾個(gè)問(wèn)題12-09

研究道路改造工程施工中應注意的幾個(gè)問(wèn)題03-21

激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频