关于指针和引用的区别在于:
指针是对地址的一份拷贝,虽然对其的使用,可以通过地址来改变实参的值,
但如果对这个指针的拷贝,做出改变,那么这种改变将不影响实参。
而引用,是一种间接的操作,对形参的所有改变,都会通过间接的操作,映射到实参中,引用本身就是一种别名,所以对这个别名的操作,就是对实参的操作。还有一些其他的区别,就是引用,不能为空,必须初始化,sizeof不同等等。。
引用传递和指针传递是不同的,虽然它们都是在被调函数栈空间上的一个局部变量,但是任何对于引用参数的处理都会通过一个间接寻址的方式操作到主调函数中的相关变量。而对于指针传递的参数,如果改变被调函数中的指针地址,它将影响不到主调函数的相关变量。如果想通过指针参数传递来改变主调函数中的相关变量,那就得使用指向指针的指针,或者指针引用。如果,想通过指针参数传递,来改变主调函数中的相关变量,那就是使用指向指针的指针,或者指针的引用。
#include<iostream>
using namespace std;
//值传递
void change1(int n){
cout<<"值传递--函数操作地址"<<&n<<endl; //显示的是拷贝的地址而不是源地址
n++;
}
//引用传递
void change2(int & n){
cout<<"引用传递--函数操作地址"<<&n<<endl;
n++;
}
//指针传递
void change3(int *n){
cout<<"指针传递--函数操作地址 "<<n<<endl;
*n=*n+1;
}
int main(){
int n=10;
cout<<"实参的地址"<<&n<<endl;
change1(n);
cout<<"after change1() n="<<n<<endl;
change2(n);
cout<<"after change2() n="<<n<<endl;
change3(&n);
cout<<"after change3() n="<<n<<endl;
return true;
}