标题简版,为何,因为据我所知,指针是个比较难懂的东西,老实说,我不是很喜欢给知识标记难学易学的标签,因为这样会打击我的自信心,所以就来学习这个正常难度的指针吧。所以该篇文章的长度要大于其他自学计划的长度。
感觉不是像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
加就得到数据,不加就是地址。加上得到变量的值,不加得到变量的地址,大概聊到这里。
网友评论