程序中的變量只是一段存儲空間的別名,那麼是不是必須通過這個別名才能訪問這段存儲空間?
*號的意義:
在指針聲明時,*號表示所表明的變量爲指針;在指針使用時,*號表示取指針所指向的內存空間中的值。
*號類似於一把鑰匙,通過這把鑰匙可以打開內存,讀取內存中的值。
int i=0; int j=0;
int* p=&i; //指針聲明
j=*p; //取值
劃重點:變量p保存着變量i的內存地址,即 p <---> &i, *p <---> i 32位系統中,指針爲4個字節大小。
傳值調用與傳址調用:
指針是變量,因此可以聲明指針參數;
當一個函數體內部需要改變實參的值,則需要使用指針參數;
函數調用時實參值將複製到形參;
指針適用於複雜數據類型作爲參數的函數中。
對於const和指針的交叉考察,只需關注const修飾的是什麼就行:
修飾的是指針,那麼指針是不能改變的(p3);
修飾的是數據,那麼指針指向的數據是不能改變的(p1、p2)。
int main()
{
int i=0;
const int* p1 = &i;
int const* p2 = &i; //注意此處const依然修飾的是int* p2,即這個數據是不能被改變的。
int* const p3 = &i;
const int* const p4 = &i;
*p1 = 1; //error
p1 = NULL; //ok
*p2 = 2; //error
p2 = NULL; //ok
*p3 = 3; //ok
p3 = NULL; //error
*p4 = 4; //error
p4 = NULL; //error
return 0;
}
小結:
指針是C語言中一種特別的變量;
指針所保存的值是內存的地址;
可以通過指針修改內存中的任意地址內容。