回覆列表
  • 1 # 聽哥本哈根故事

    變數a的地址是不能變的,當程式被載入時,作業系統會為它分配好地址,且一經分配,不能再改變!當然,每一次程式執行時,作業系統為a分配的地址可以不同。有以下幾點常常另初學者感到困惑,現舉例加以解釋:int b,c,*a;a=&b;語句a=&b;並沒有改變a的地址,它只是改變了a這個箱子中裝的東西。如果你在語句a=&b;的前後用printf("%d",(int)&a);輸出a的地址,就會發現它們是一樣的。如果後面再來個a=&c;則printf("%d",(int)&a);的輸出也一樣!關鍵是要區分以下幾點:a,表示a的值,即它裝的東西,具體到這個例子,a裝的是另一個int型變數的地址。如果a不是const型別的,則它裝的東西可以改變。比如,這裡先裝的是b的地址(指標變數是用來裝地址的),後改成了c的。&a,當然就表示a自己的地址了,你可以將a想象成一個箱子,它的地址就是這個箱子的編號。*a,因為a是一個指標,*a就表示a指向的變數的值,即b或c的值(具體要看a裝的是誰的地址,即a指向誰),也即*a=b或*a=c。現假設a裝的是b的地址,那有:a=&b,即a的值等於b的地址。*a=b=*(&b),這裡*的作用是取出某個地址中的值。因為a的值是b的地址,因此*a取出的是b的值,同理(&b)是b的地址,*(&b)取出的也是b的值!分析一下a,b,c的記憶體模型(即它們在記憶體中是怎樣表示的、關係又是怎樣的),理解這些就不難了,你邊學邊體會吧!

  • 中秋節和大豐收的關聯?
  • 如何正確使用水滴輪防止炸線?