指针的引用与指向指针的指针

         一般来说,为函数传入一个参数,如果希望函数执行完成后对参数的改动依然保留,那么有两种方式:

①  传入一个引用

②  传入一个指针

         传入引用的方式很好理解,就是相当于将变量本身传入,针对变量所进行的一切修改都是直接对变量本身的修改。

         传入指针则不然,传入指针后进行的修改,实际上是对指针指向的地址的内容进行修改,而不是对指针本身进行修改。比如说,指针的值是0x01cd3e2c,那么被修改的是0x01cd3e2c地址所代表的内容,指针的值0x01cd3e2c本身是不会被修改的。也就是说,传入指针,修改的是指向的内容,但指向的地址是不会变的。

         即便对指针的值进行了修改,函数结束后,会发现指针的值依然不变,这是由于传入的参数不是引用造成的。传入的参数不是引用,那么对该参数进行的任何修改都不会保留到函数结束后。

         比如:

void Function(int*    pValue)
{
	pValue = newint[10];
}

void main()
{
	int*pValue = NULL;
	Function(pValue);     //1
}

         上面的1执行完成后,会发现pValue的值依然是NULL。但是在函数体内刚对pValue进行修改时,其值却是正确的。

         这是因为在函数体内,直接对pValue的值进行了修改,而非对pValue所指向的内存地址数据。pValue作为一个实参,传入后的一切修改都不会影响到自身的值,所以才会出现上述情况。

         因此,改为如下代码:

void Function(int*& pValue)
{
	pValue = newint[10];
}

void main()
{
	int*pValue = NULL;
	Function(pValue);     //2
}

         这样,将Function的传入参数改为指针的引用,于是对指针自身值的一切修改就都会得到保存。2执行完成后,会发现pValue的值是正确的。

        

         指向指针的指针,也就是类似于void**。同理,void**作参数是相同的原因。        

         总之,如果要在函数内部修改指针自身的值,那么应该使用指针的引用或者指向指针的指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值