C++自学计划-指针(简版)-12

2018-12-18  本文已影响0人  你缺少想象力

标题简版,为何,因为据我所知,指针是个比较难懂的东西,老实说,我不是很喜欢给知识标记难学易学的标签,因为这样会打击我的自信心,所以就来学习这个正常难度的指针吧。所以该篇文章的长度要大于其他自学计划的长度。

感觉不是像int i那么容易让人理解,所以这次写的详细点。

知识点1: 一个运行的程序,这个程序运行的部分都在内存中。
知识点2:电脑会运行很多程序,但内存就那么点,而且只有在运行的部分才在内存中

通过以上两点,结论:内存中有着大量的“程序碎片”

知识点3:内存大小是有限的,甚至远远小于正在运行的程序的总大小
知识点4:程序的运行非常不确定,可能上一秒在运行这个程序,下一秒就运行另一个程序了

结论:内存中的数据分布十分不均匀,如果关闭一个大型程序,内存中会留下大量空闲区域,所以内存中的数据不可能乖乖的顺序排列

既然已经不能乖乖的顺序排列了,不如就直接全部打散,将程序撕成分子级别的大小,丢进内存的格子里面,为了快速找到这些分子,需要给分子定一个标签,知道他在哪行哪列。但是这些标签,也需要放在格子里面,所以这些标签就有了标签

为了更加友好的理解,不如给这些分子取一个名字,叫变量(并不准确,但便于理解),那些标签,不如就叫地址。

先向内存申请一个格子

int a;

现在这个格子便有了一个标签 (地址),然后把数据放在格子里:

int a;
a = 10;

怎么看标签(地址)呢:

int a = 10;
std::cout << &a << std::endl;

结果:

0x7ffeef7f34fc

讲了那么多废话,现在开始讲指针。

上面说到,那些标签,也要有个格子放,而那些格子又有标签。

那些指向标签的标签,不如就叫指针吧。(有点难理解哈)

这样理解好了,先不看标签对标签,先看标签对格子,格子里面对东西总是会变动的,因为同一个格子可以存放不同的东西。

那么我们来看标签对标签,为了分辨二者关系,不如就叫,标签格子对标签。根据格子对标签,我们得到,标签不变,格子中对数据要变。那标签格子对标签就是,标签格子里面对标签要变,但是标记标签格子对标签不变。(多读即便并画图,应该能分析出来)

这个标签格子对的这个标签,就是指针。往大了说,就是指针存放变量地址

如何声明一个指针标签的格子

int *p;

如何在这个格子里面放标签(地址)

int a = 10;
int *p = &a;

怎么使用指针,感受一下

    int a = 10;
    int *c = &a;

    std::cout << c << std::endl;
    std::cout << *c << std::endl;

运行结果:

0x7ffeedfdb50c
10

就得到数据,不加就是地址。加上得到变量的值,不加得到变量的地址,大概聊到这里。

上一篇下一篇

猜你喜欢

热点阅读