一 引用和指针
引用:
给已存在变量取一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间. 在C++语言中,函数的参数和返回值的传递方式有三种:值传递,指针传递和引用传递.引用具有指针的效率,又具有变量使用的方便性和直观性.
指针:
内存地址,指针变量是用来存放内存地址的变量.不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。
二 引用与指针的区别
1 引用在定义时必须初始化,指针则没有要求(尽量初始化,防止野指针)
2 引用在初始化引用一个实体后,就不能再引用其它实体,而指针可以在任意时候指向一个同类型实体
3 没有NULL引用,但是有nullptr指针
4 在sizeof中含义不同: 引用结果为引用类型的大小,但指针始终是地址空间,所占字节个数(32位平台占4个字节)
5 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
6 有多级指针,但没有多级引用
7 访问实体的方式不同,指针需要显式解引用,引用编译器自己处理
8 引用是类型安全的,即引用比指针使用起来相对安全
三 代码示例
int main()
{
int v1 = 10;
int *v2 = &v1;
int &v3 = v1;
int &v4 = v3;
printf("v1 = %d; v1 addr = %p \r\n", v1,&v1);
printf("v2 = %d (%p); v2 addr = %p \r\n", v2, v2, &v2);
printf("v3 = %d (%p); v3 addr = %p \r\n", v3, v3, &v3);
printf("v4 = %d (%p); v4 addr = %p \r\n", v4, v4, &v4);
system("pause");
return 0;
}
结果:
v1 = 10; v1 addr = 0044FA3C
v2 = 4520508 (0044FA3C); v2 addr = 0044FA30
v3 = 10 (0000000A); v3 addr = 0044FA3C
v4 = 10 (0000000A); v4 addr = 0044FA3C
四 左值与右值
左值: 表示存储在计算机内存的对象。代表一个内存地址值。
右值: 一个真实具体的值。
int v1 = 10;
int &v2 = &v1;
int &v3 = v1;
参考:
https://blog.csdn.net/HUAERBUSHI521/article/details/118368696 https://baike.baidu.com/item/%E5%B7%A6%E5%80%BC%E4%B8%8E%E5%8F%B3%E5%80%BC/5537417?fr=aladdin
|