臭名昭著的指針,該如何讓自己釋懷?
指針就是地址 ?錯誤
指針其實是一種保存變量地址的變量,在c語言中是比較頻繁使用的。
1.“*”作爲一種引入類型
int *(類型) :指向int的指針類型
float *(類型):指向float的指針類型
double*(類型):指向double的指針類型
因爲是指針類型,所以它和int類型、float類型、double類型一樣
2.先有“指針類型”,纔會有指針變量
指針既有指針變量,又有指針指向的值。
對語義的理解,最簡單最直接的理解還是以內存模型(也就是小格子)爲基礎,畫出了內存模型,無論是什麼類型的指針還是幾階指針都一目瞭然了。
int main(void)
{
int *p;
int i = 3;
printf("p = %p\n",p);
printf("&p = %p\n",&p);
printf("&i = %p\n",&i);
p = &i;
printf("----p = %p\n",p);
printf("----&p = %p\n",&p);
return 0;
}
輸出結果爲
p = 0x7ffc0fec3320
&p = 0x7ffc0fec3230
&i = 0x7ffc0fec322c
----p = 0x7ffc0fec322c
----&p = 0x7ffc0fec3230
程序解釋:
“p = 0x7ffc0fec3320” p指針所指向的地址是0x7ffc0fec3320
“&p = 0x7ffc0fec3230” p這個指針變量自己本身的地址
“&i = 0x7ffc0fec322c” i這個變量所在的內存地址
當執行完,p = &i;這個時候P本身的地址還是它原來的地址但是它所指向的地址編程的i。
&i = 0x7ffc0fec322c
----p = 0x7ffc0fec322c
此時這兩個值是相同的說明p指向的地址就是i所在的地址。
總結:指針就是一個具體特殊功能的變量。