漫談(一)對”C“語言的理解,“不看後悔一輩子”

 臭名昭著的指針,該如何讓自己釋懷?

指針就是地址 ?錯誤

指針其實是一種保存變量地址的變量,在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這個指針變量自己本身的地址

 

 

P的初值存儲圖

 

“&i = 0x7ffc0fec322c”  i這個變量所在的內存地址

當執行完,p = &i;這個時候P本身的地址還是它原來的地址但是它所指向的地址編程的i。

&i = 0x7ffc0fec322c
----p = 0x7ffc0fec322c

此時這兩個值是相同的說明p指向的地址就是i所在的地址。

總結:指針就是一個具體特殊功能的變量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章