您的位置:首页 > 其它

*参数做形参和*&参数做形参的区别(我的理解.)

2010-12-09 11:38 357 查看
1.*&做形参相当于指针的引用.用于对指针变量的内容(而非其指向的内容)进行操作.

其传入的是指针变量的地址.可以影响到指针变量内容的变化.

void increase(int *&i)
{
i++;
}

void main(void)
{
int i=10;
int *p_i=&i;
cout<<"p_i="<<p_i<<endl;//p_i=0012ff6c
cout<<"*p_i="<<*p_i<<endl;//*p_i=10
increase(p_i);
cout<<"p_i="<<p_i<<endl;//p_i=0012ff70
cout<<"*p_i="<<*p_i<<endl;//*p_i=4512135

}


说明:increase前p_i的内的数据是:0012ff6c,0012ff6c的地址内存放整数10.

increase之后,对p_i内的数据进行了增量操作,结果为:0012ff70,由于0012ff70
为未知地址,其内存放的为乱码.
这说明通过指针引用,我们可以修改指针变量内的数据.

2.指针做形参时我们并不能修改指针变量内的数据.

void increase(int *&i)
{
i++;
}
void increase_1(int *p)
{
p++;
}
void main(void)
{
int i=10;
int *p_i=&i;
cout<<"p_i="<<p_i<<endl;//p_i=0012ff70
cout<<"*p_i="<<*p_i<<endl;//*p_i=10
increase_1(p_i);
cout<<"p_i="<<p_i<<endl;;//p_i=0012ff70
cout<<"*p_i="<<*p_i<<endl;//*p_i=10


经过increase_1操作之后的输出结果并没有发生变化.这是由于在参数传递时,由于没有使用&,这里只传入了指针p_i内的值,而非p_i的地址.

所有的操作都在increase内新建的副本上进行,并没有影响到外部的p_i变量.

但是由于传递的是p_i内的值,即整数i的地址,所以如果在此函数中对变量i的值进行修改,则会影响到外部i的变化.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: