本人在此记录的为本人学习历程,并不是想为大家展示什么,请不要高估我,谢谢~
视频内容源自于B站上一位名叫 @佐夫 搬运的YouTube上 @TheCherno 的视频。
看着视频学习了指针(pointers)和引用(references),Cherno说指针也是一个变量,通过学习,我将变量描述为,有内存地址的一串字符,我用指针对变量进行操作,发现指针也有内存地址。
char* buffer = new char[4]; //Cherno这样写的,将char大小重新定义,我也不知道为什么。
memset(buffer, 10, 4);
char** b = &buffer;
char* a = buffer;
char** c = &a;
char*** d = &b;
这是监视器内容 a,c同理。
buffer 0x00b8d340
b 0x006cfe38 {0x00b8d340} char **
&b 0x006cfe2c {0x006cfe38 {0x00b8d340}} char ***
d 0x006cfe2c {0x006cfe38 {0x00b8d340}} char ***
&d 0x006cfe08 {0x006cfe2c {0x006cfe38 {0x00b8d340}}} char ****
而引用,我觉得引用的作用就是给变量起小名。
int f = 20;
int& ref = f;
f 21 int
&f 0x003bf900 {21} int*
ref 21 int&
&ref 0x003bf900 {21} int*
可以发现,ref与f的地址相同,通过对ref的操作可以影响到f的返回值,这可真有意思!
我们还可以发现,带有内存地址的东西,本质上是指针,所以我们可以:
int f = 20;
int& ref = f;
int* pf = &f;
int** dpf = &pf;
int*** tpf = &dpf;
int* pref = &ref;
int** dpref = &pref;
int*** tpref = &dpref;
f 20 int
ref 20 int &
pref 0x00cff81c {20} int *
dpref 0x00cff7e0 {0x00cff81c {20}} int * *
tpref 0x00cff7d4 {0x00cff7e0 {0x00cff81c {20}}} int * * *
C++实在是太好玩儿了!!!