*参数做形参和*&参数做形参的区别(我的理解.)
2010-12-09 11:38
357 查看
1.*&做形参相当于指针的引用.用于对指针变量的内容(而非其指向的内容)进行操作.
其传入的是指针变量的地址.可以影响到指针变量内容的变化.
说明:increase前p_i的内的数据是:0012ff6c,0012ff6c的地址内存放整数10.
increase之后,对p_i内的数据进行了增量操作,结果为:0012ff70,由于0012ff70
为未知地址,其内存放的为乱码.
这说明通过指针引用,我们可以修改指针变量内的数据.
2.指针做形参时我们并不能修改指针变量内的数据.
经过increase_1操作之后的输出结果并没有发生变化.这是由于在参数传递时,由于没有使用&,这里只传入了指针p_i内的值,而非p_i的地址.
所有的操作都在increase内新建的副本上进行,并没有影响到外部的p_i变量.
但是由于传递的是p_i内的值,即整数i的地址,所以如果在此函数中对变量i的值进行修改,则会影响到外部i的变化.
其传入的是指针变量的地址.可以影响到指针变量内容的变化.
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的变化.
相关文章推荐
- *参数做形参和*&参数做形参的区别.
- 函数参数为 "char* p" 与 "char*& p" 的区别
- OpenCV2.4.13中同一函数不同形参的理解,vector,list区别,findContours理解
- Linux操作系统中内存buffer和cache的区别 && free 参数说明
- C++引用&和指针在作为形参时的区别
- TCP+UDP区别&&TCP三次握手理解
- 用"堆栈区数据复制"理解Java赋值和参数传递机制的心得
- php: return与=区别及参数中$var=\'d\'与$var区别 =&gt; 难题已解
- 理解配置yarn参数&mapreduce参数
- 如何理解数据结构中的引用参数 &
- c++与java区别的理解(二)--处理参数顺序和输出编译顺序
- 理解C#中参数的值和引用以及传递结构和类引用的区别
- 理解配置yarn参数&mapreduce参数
- php 对象用&传递参数 与 对象用作普通参数的区别
- 【转】深入理解C++的动态绑定和静态绑定 & 不要重定义虚函数中的默认参数
- SLAM和MonoSLAM简介与理解,VSLAM和SFM(structure form motion)的区别-->cvchina
- C语言中实参和形参问题&&函数使用数组作为参数的问题
- GET请求中参数分隔符分号(;)和and符(&)分隔参数的区别
- CNN的超参数 & 宽卷积和窄卷积的理解及tensorflow中的实现