在C语言中,我们要在函数里修改实参的值或者为为变量起一个别名,我们会使用指针;在C++中,除了可以使用指针外,还可以使用引用。
引用(指针)的作用:
1、在函数中可以修改实参的值。
2、解决函数无法返回多个值的问题。
3、避免参数传递时不必要的变量复制。
引用与指针的区别:
1、指针是一个变量,它保存另一个变量的地址;引用是一个变量的别名,它和另一个变量指向同样的地址。所以,引用比指针更加节省空间。
2、引用在创建时必须初始化,不能为空,指针可以为空指针。
几点注意:
1、指针是一个变量,所以可以有指针的引用;引用只是一个别名,所以没有引用的指针或者引用的引用,因为引用和指针都是对一个变量而言,既然引用不是一个变量,那就不存在引用的指针或者引用的引用了。
2、void引用不合法,因为void只是语法上一个类型,其实质上并不是一个类型。但void指针是合法的,任何类型的指针都可以隐式传给void指针,void指针传给其它类型的指针则要显式转换。
3、引用数组不合法。
#include <iostream>
using namespace std;
void test();
void swap1(int a,int b);
void swap2(int &a,int& b);
void swap3(int* a,int* b);
int main(int argc,char** argv){
int num=0;
int& r_num=num;
cout << "num=" << num << ",r_num=" << r_num << endl;
r_num=7;
cout << "num=" << num << ",r_num=" << r_num << endl;
cout << "num's ref=" << &num << ",r_num's ref=" << &r_num << endl;
int* p_num=#
cout << *p_num << endl;
test();
int a=10,b=20;
cout << "before swap:a=" << a << ",b=" << b << endl;
swap1(a,b);
cout << "after swap1:a=" << a << ",b=" << b << endl;
swap2(a,b);
cout << "after swap2:a=" << a << ",b=" << b << endl;
swap3(&a,&b);
cout << "after swap3:a=" << a << ",b=" << b << endl;
return 0;
}
void test(){
int* p_a=NULL;
int*& r_p_a=p_a;
int b=10;
r_p_a=&b;
cout << *p_a << b << endl;
}
void swap1(int a,int b){
int temp=a;
a=b;
b=temp;
}
void swap2(int &a,int& b){
int temp=a;
a=b;
b=temp;
}
void swap3(int* a,int* b){
int temp=*a;
*a=*b;
*b=temp;
}