引用是已经定义的变量的别名,使用引用变量主要是用于函数的形参,这样函数将使用原始数据,而不是使用其拷贝。
声明中:char* 指向char的指针 int& 指向int的引用
int a=101;
int& b=a;
int* p=&a;
其中,表达式a、b和*p可以互换,表达式&a、&b和p可以互换,他们是等价的。
1.指针可以先声明,再赋值,但是引用必须在声明时将其初始化,如:int& b; b=a;(invalid)
2.引用必须在创建时初始化,一旦与某个变量关联,将不能再改变。int& b=a;与 int* const p=&a;中,b与*p所承担的角色是等价的。
3. void swapr(int &a,int &b); //按引用传递,使用原始数据
void swapp(int* p,int* q); //按指针传递,使用原始数据
void swapv(int a,int b); //按值传递,使用原始数据的拷贝
所以,如果想让函数使用通过引用传递的信息,但又不想修改这些数据信息,应该使用常量引用。如:
double cube(const double &r);
4.将引用用于结构只须声明结构参数时使用操作符&即可,通常需将返回的引用声明为const,应当不返回函数终止时不再存在的内存单元引用,(也不应该使用返回指向临时变量的指针)所以,需要返回一个作为参数传递给函数的引用。
struct name
{
char name0[50];
int age;
}
const name& writeName(name& p)
……
const name& 不是说结构name本身是const,而是说不能使用返回的引用来修改它指向的结构,如:
writeName(Marry).name0=Peter; (invalid,但是,如果去掉const后,则是允许这样表示的)