简介:
使用&可以为变量取别名
如:
int a=1;
int& b=a;
则输出b和输出a是一样的,它们指向同一块空间,修改b也会把a的值也修改了
注意:
1. 一个变量可以取好几个别名
如:
int a=1;
int&b=a;
int &c=a;
int&d=c;
c=5;
修改任意一个会让abcd的值改变,是同一块空间
2. 必须在定义时初始化
可以这样:
int&b=a;
不能这样:
int&b;
b=a;
3. 引用一旦引用了一个实体就不能在引用其他实体
int&b=a;
那么b就只为a服务,不能再成为其他玩意儿的别名了
4.这种情况不能取别名
const int m=1;
int &n=m;
const把m的权限设置为只读不写,所以通过取别名来修改m是不行的
高级操作:
C语言用指针苦不堪言的传地址才能改参数?
不妨试试引用:
void swap(int& a, int& b) //a成了x的别名,b成了y的小名
{
int temp;
temp = a;
a = b;
b = temp;
}
int main()
{
int x = 1;
int y = 2233;
swap(x, y);
cout << x << " " << y;
}
当然,指针也可以
//定义一个结构体
typedef struct a
{
int val;
struct a* next;
}test;
//处理结构体的函数
void changeVal(test*& pt) //这里对传过来的指针取别名
//并使用别名直接对传过来参数本尊直接修改,无需二级指针
{
pt->val = 1;
}
int main()
{
test teststruct;
test* ptest=&teststruct;
changeVal(ptest);
cout << ptest->val << " ";
}
另外,这里的typedef还可以这样搞一下
typedef struct a
{
int val;
struct a* next;
}test,*TEST; //相当与把sutruct a简化为test ,把struct a* 简化为了TEST
void changeVal(TEST& pt) //这个地方也就被简化了
{
pt->val = 1;
}
int main()
{
test teststruct;
test* ptest=&teststruct;
changeVal(ptest);
cout << ptest->val << " ";
}