变量名的回顾
变量名实质是一段连续存储空间的别名,是一个标号
程序中通过变量来申请并命名内存空间
通过变量的名字可以使用储存空间
问题1:对一段连续的内存空间只能取一个别名吗?
是可以的
1.引用的概念
a) 在C++中新增加了一个引用的概念
b) 引用可以看作一个已定义变量的别名
c) 引用的语法:Type&name=var;
d)引用做函数参数?(引用做函数参数声明时不进行初始化)
e)引用做变量是需要初始化,引用做函数参数时不需要初始化
2.引用做函数参数
//方法一:使用指针
void swap1(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int main(void)
{
int x = 10, y = 100;
swap1(&x, &y);
/*swap2(x, y);*/
printf("%d\n%d\n", x, y);
return 0;
}
//方法二:使用引用
void swap2(int& a, int&b)
{
int tmp = a;
a = b;
b = tmp;
}
int main(void)
{
int x = 10, y = 100;
/*swap1(&x, &y);*/
swap2(x, y);
printf("%d\n%d\n", x, y);
return 0;
}
输出结果
3,引用的意义
a)引用作为其变量的别名存在,在一些场合可以代替指针
b)引用相对于指针来说具有更好的可读性和实用性
4.指针的引用
int main(void)
{
int x = 666;
int* p = &x;
int*& q = p;//q就是对指针p的引用
printf("*p:%d\n *q:%d\n", *p, *q);
return 0;
}
结果
5.二级指针的引用
//二级指针
void boy_home(int**meipo)
{
static int boy = 23;
*meipo = &boy;
}
//二级指针的引用
void boy_home2(int*&meipo)
{
static int boy = 23;
meipo = &boy;
}
int main(void)
{
int* meipo = NULL;
boy_home(&meipo);//方法一
boy_home(meipo);//方法二
printf("boy:%d\n", *meipo);
}
//结果 23