一、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、當數組作為函數的參數進行傳遞時,該數組自動退化為同類型的指針。?
因為第三條,當把數組名作為函數的形參進行傳遞時,該效果等同于傳遞一個同類型的指針。直接在程序當中調用 函數名(數組名)即可。
?