天天看點

C語言:指針的幾種形式二

一、const指針

1、const int* p和int const* p:兩者意義是相同的。指向的内容是隻讀資料,不可以q改變;但是指向的位址可以改變。

2、int* const p:必須先對指針初始化,而且指向的位址是隻讀的,不可以再被改變;但是指向的内容可以改變。

3、const int* const p:既不可以改變指針指向的位址,也不可以改變指針指向的内容。

二、指針數組:元素類型全是指針

類型名稱*數組名[數組長度]

例如:

   char* pc[10]:字元指針數組,常用來可以表示一個字元串

三、數組指針:指針指向數組名

類型名稱(*指針名)[數組長度]

   int a[5] = {1,2,3,4,5};

   int (*temp)[5] = &a; //temp指向的是整個數組

注意:

   1、定義指針時()不能丢掉,因為[]優先級比*高,若丢掉,就會變成指針數組。例如:int *temp[4]//數組4個元素都是int*。

   2、數組長度、元素類型必須與指針定義時給出的長度、類型相同。

四、函數指針

資料類型(*指針變量名稱)(形式參數清單)

本質:函數放在代碼區,函數指針指向代碼區,通過函數指針可以通路代碼區中的内容。括号()不可以省。。。

例如:float (*p)(float a,float y):float類型指針函數

     float* p(float x,float y):函數p傳回值為float指針類型

五、總結數組與指針的差別:

1、指針的本質是一個與位址相關的複合類型,它的值是資料存放的位置(位址);數組的本質則是一系列的變量。

2、數組名對應着(而不是指向)一塊記憶體,其位址與容量在生命期内保持不變,隻有數組的内容可以改變。指針可以随時指向任意類型的記憶體塊,它的特征是"可變",是以我們常用指針來操作動态記憶體。

3、當數組作為函數的參數進行傳遞時,該數組自動退化為同類型的指針。 

因為第三條,當把數組名作為函數的形參進行傳遞時,該效果等同于傳遞一個同類型的指針。直接在程式當中調用 函數名(數組名)即可。

程式猿神奇的手,每時每刻,這雙手都在改變着世界的互動方式!

本文轉自當天真遇到現實部落格園部落格,原文連結:http://www.cnblogs.com/XYQ-208910/p/4887949.html,如需轉載請自行聯系原作者

繼續閱讀