& 在C++中表示引用,用来表示存储器的别名。
int x =7;
int& y=x;//定义了一个指向x的引用
上面分配了一个int单元,它有两个名字x ,y。
还需要注意的是指针的引用
int a = 1;
int b = 2;
int *tmp = &a;
int *p = tmp;// 第二种情况:int *&p = tmp;(此既是指向指针的引用)
p = &b;
*p = 5;
结果一:a=1,b=5,*tmp=1;*p=5;
结果二:a=1,b=5,*tmp=5,*p=5;
动态分配
class Person
{
public:
void eat();
private:
int m_iAge;
string m_strName;
}
int main(void)
{
Person one = new Person();//动态分配存储空间
delete one;//释放分配的存储空间,new 和delete 同时结对出现。
Person two; //当不需要时,系统自动释放存储空间
}
引用调用
当一个函数的参数为引用参数,则会出现引用调用。在以往的程序中我们都是直接传递参数,实际上函数里的虚参为实参的一个拷贝,在函数中对虚参进行计算是无法改变实际参数的,若使用引用调用,则是将实际参数传递给函数进行运算,在函数中改变参数的值,主程序中的值也会改变。
#include<iostream>
using namespace std;
void swap(int a,int b);//第二种情况:void swap(int& a,int & b);
int main(void)
{
int x = 4;
int y = 11;
cout<<"x="<<x<<", y="<<y<<endl;
swap(x,y);
cout<<"x="<<x<<", y="<<y<<endl;
return 0;
}
void swap(int a,int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
/**第二种情况:
void swap(int& a,int& b)
{
int temp;
temp = a;
a = b;
b = temp;
}
*/
第一种情况:
a=4,b=11
a=4,b=11
第二种情况:
a=4,b=11
a=11,b=4