C++学习笔记 第五课 引用

学习笔记内容来自:狄泰软件学院 唐佐林老师 的视频,十分感谢您的指导

1.引用是一个变量的别名,即是一段内存空间的代号
2.如果要使一个已经存在的非只读变量拥有只读属性,只需要定义一个新的const变量做为它的引用,则该新的变量为只读的
3.当使用字面常量对const引用进行初始化时,c++编译器会为常量值分配空间,并将引用名作为这段内存空间的别名,即该const引用会用该段内存,取值的时候不会去符号表拿而是去该段内存拿
4.当用一个引用对另一个引用初始化时,新的引用跟另一个引用所代表的是同一段内存空间的别名,取地址时结果相同

示例程序:
(1)

int a = 0;

const int& b = a;

int* p = (int*)&b;

b = 5;//Error,b是只读变量

*p = 5;//Ok,修改变量a的值

(2)

const int& b = 1;

int* p = (int*)&b;

b = 5;//Error,只读变量

*p = 5;//Ok,修改变量b所对应的内存空间的值

引用有没有自己的内存空间呢?(有)

示例程序:
(1)

#include <stdio.h>

struct TRef
{
char& r;
};

int main()
{
char c = 'c';
char& rc = c;
TRef ref = {c};

printf("sizeof(char&) = %d\n",sizeof(char&));  //1
printf("sizeof(rc) = %d\n",sizeof(rc));  //1

printf("sizeof(TRef) = %d\n",sizeof(TRef));  //4
printf("sizeof(ref.r) = %d\n",sizeof(ref.r));  //1

return 0;
}

引用的本质:指针,所以第三个打印的是4(因为它还没有初始化为是谁的引用,所以打印出来的是指针的大小)

引用在C++中的内部实现是一个指针常量
Type& name; -> Type* const name;

发布了15 篇原创文章 · 获赞 0 · 访问量 108

猜你喜欢

转载自blog.csdn.net/u012321968/article/details/104449958