今天研究了一下函数指针传参问题,遇到了一些问题,特此记录下来,待后续研究。
首先贴下自己写的一个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 .
待以后解决。