C++的引用
(1) 概念:在c++中,引用的意思就是引用可以看作一个已定义变量的别名。
(2) 语法:int a = 10; int &b = a; (意思是b引用a,这个时候a和b代表同一块地址,并且有一样的数据)
(3) 例子:(普通引用)
#include <stdio.h>
int main()
{
int a = 10;
int &b = a;
printf("a = %d, b = %d\n", a, b);
printf("a = %p, b = %p\n", &a, &b); //输出的地址和数据都是一样的
return 0;
}
(4) 例子:(指针引用)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student
{
int id;
char name[20];
};
void func1(student **msg) //c语言中指针的传递用二级指针来接收
{
}
void func2(student * &msg) //c++中可以用指针引用来接收
{
msg = (student *)malloc(sizeof(student));
msg->id = 123;
strcpy(msg->name, "wang");
}
int main()
{
student *msg = NULL;
// func1(&msg);
func2(msg); //在指针引用中,函数参数可以直接填指针变量名,不用加取地址符号
printf("id = %d, name = %s\n", msg->id, msg->name);
return 0;
}
(5) 例子:(常引用)
#include <stdio.h>
int main()
{
int b = 10
const int &a = b; //常引用中前必须加const,让变量a拥有只读属性,不能通过a改变b的值
int *p = (int *)&a; //虽然不能通过a来改变b的值,但是可以通过指针来改变值
printf("*p = %d, a = %d\n", *p, a);
*p = 200;
printf("*p = %d, a = %d\n", *p, a);
const int &c = 10; //用常量去初始化常引用,C++编译器把c放在符号表中
// int& b = 41; 普通引用,引用一个常量,常量是没有地址空间的,这样的做法是不合法的
// 使用常量去初始化常引用是合法的,C++编译器会为该引用分配空间,常量的值存储到分配的空间中去,使用常量对 const引用 初始化后,将生成一个只读变量
printf(“c = %d, c = %p\n”, c, &c);
return 0;
}