今天研究了一下函數指針傳參問題,遇到了一些問題,特此記錄下來,待後續研究。
首先貼下自己寫的一個test程序。
test.cpp運行結果:
從上面的小程序可以看出來,整型i的值爲:100, i 的地址爲:0x0024F7CC,
指針pI的值:0x0024F7CC pI 的地址爲:0x0024F7C0.
指針ppI的值爲:0x0024F7C0 ppI的地址爲:0x0024F7B4.
附上一張自己畫的草圖來簡化他們之間的關係:
綜合上面幾張圖可以看出,指針的值是32位的正整數。變量pI的值就等於變量i的地址,而pI本身的地址爲0x0024F7C0;ppI的值就是pI的地址,
而ppI本身的地址爲0x24F7B4.如此下去,我們甚至可以聲明N級指針。草圖表示了i, pI, ppI的內存映像及他們之間的關係。
現在回到上面程序的輸出結果可以看到,&*p 和 *&p的值都爲0x0024F7CC. 解釋一下:*p = 100,則就是變量i的值,這個時候對*p進行取地址,&*p,
就得到 &*p = p = &i = 0x0024F7CC. 對於*&p 就更好理解, &p的地址爲0x0024F7C0, * &p就相當於去這個地址塊的值則 *&p = 0x0024F7CC.
搞清楚上面的問題後,現在進入正題,函數指針傳參問題:
在這段小程序中,注意Allocate的參數寫法爲Allocate(int *&p,int size) .方法是要對地址p進行分配size大小的內存。
這裏這個參數* &p 是需要將p的地址傳進來,這裏有點不理解這個傳參的具體含義。而且這裏不能傳諸如&*p, **p .
待以後解決。