指標儲存地址分析

YN66666666發表於2018-04-08

以上程式碼裡面有四個指標ptr,ptr2,ptr3,ptr4

ptr,沒有被初始化值,所以在.bss資料段,它指向一個int型別資料的地址(還不知道要用來指向哪個int數值的地址)

但是它自己儲存的是個地址,所以它自己是long長度的資料,儲存在.bss


ptr2,指向foo這個int資料的地址

ptr2是確定型別(儲存地址,long),確定數值(指向全域性變數foo),所以它自己也是確定的全域性變數,所以ptr2在.data資料段。


ptr3,在main函式裡儲存i的地址,隨著main函式的退出,ptr3這個變數的作用範圍就消失了,所以它是在main scope裡面的自動變數,

它在stack裡


ptr4,指向一塊heap記憶體的地址,heap記憶體本身的這塊資料是malloc申請得到的,所以它的scope由使用者控制,需要使用者來後續free,

所以ptr4在stack裡;如果你想在main的外部(比如別的函式裡),去獲得ptr4這個地址的值,你就必須把ptr4的值傳給別的函式。

否則這個地址的值在main以外的地方就丟失了,


綜上:所以指標本身也是一個普通的資料

它儲存在哪裡,和別的變數一樣的分析方法











相關文章