题外话
无
学习前必备的一些知识
关于数据在内存的存储方式一些知识
不知道的请自行退出本篇博客去学习相关知识
正文
指针的基本概念
先让我们来了解一下指针的基本概念(以下摘自百度百科):
指针描述了数据在内存中的位置,标示了一个占据存储空间的实体,在这一段空间起始位置的相对距离值。在 C/C++语言中,指针一般被认为是指针变量,指针变量的内容存储的是其指向的对象的首地址,指向的对象可以是变量(指针变量也是变量),数组,函数等占据存储空间的实体。
你看看,这是人能看得懂的吗(doge
咳咳,当然这种高深的概念肯定有一些人看不懂,所以本作者就 大发慈悲的 给你们解释一番吧
首先,发挥你的想象力来把内存空间想象成一个列表,就像这样:
id | value |
---|---|
1 | xxx |
2 | xxx |
3 | xxx |
4 | xxx |
… | … |
如果你能想象出来这张表格,那么你对指针已经理解一半了
现在来假设这张表格里有个箭头指着这个表格里的某一行,就像,这样:
id | value | |
---|---|---|
1 | xxx | |
2 | xxx | |
-----> | 3 | xxx |
4 | xxx | |
… | … |
好,如果你能把这个箭头想象出来,那么,恭喜你,你已经成功理解了“指针”这一概念了,可以进入下一阶段了解一下在程序里指针该如何实现了。
现在在你脑海里那个箭头就是指针了,那张表格就是内存空间。
指针的一些操作
首先呢,你要学会定义一个指针,就像,这样:
int *p;
现在,你已经成功定义了一个int类型的指针了,当然,这边有一个特别坑人的点,就是这个指针变量的类型是int *
名称是p
,而不是类型为int
,名称为*p
注意:指针是指向内存某一个地址的变量,所以赋值是要p=&变量名
当然也可以直接改指针指向的地点的值,只要*p=值
就好了
p+x
表示指针p
后的的x
个存储空间,x
可为负数
多重指针
这时肯定有聪明的小伙伴要问了,如果我在一个存储指针的地方再存储一个指针会发生什么样奇妙的化学反应呢?
这,就是我们接下来要了解的东西——多重指针
我们再用一遍上面那个比喻,即:把一个箭头只向一张表比作指针,那张表格就是内存空间。
id | value | |
---|---|---|
1 | xxx | |
2 | xxx | |
-----> | 3 | xxx |
4 | xxx | |
… | … |
现在我们再单独开一个内存空间用来存储这个指针
id | value | |
---|---|---|
1 | xxx | |
2 | xxx | |
3 | xxx | |
4 | xxx | |
5 | 3 | |
… | … |
然后再开一个空间用来存储指向内存序号3的指针
这就是多重指针
代码:
int a=10;//普通变量
int *p=&a;//指针
int **pp=&p;//多重指针