指针到底是个什么鬼,怎么用
学数据结构时,创建链表,他定义了个二级指针,很懵逼,所以就有了这篇博客。指针的 * 有啥用?
在我看来就像打排位匹配对手一样,什么样的段位匹配什么样的对手。就比如我是黑铁4,就匹配不到最强王者。
了解你定义的变量,是怎么来的:
首先我们来看基本数据类型,int a = 100
, a在内存中,是怎么保存的呢,首先开辟一个内存,地址如:0X61,然后他代表的值是100。
然后再来看 一级指针变量 int *p1 = &a
,我们首先还是需要去内存中开辟一个空间,然后假如 p1这个指针的值是 0X62 ,然后注意了,我们也给p1这个指针,赋值了的,所以他就指向 a 的地址: 0X61。
最后就是二级指针变量了, int **p2 = &p1
, 如上,**p2的地址值为 0X63,他指向的值就应该是 p1的地址值 。
如下图:
总结一下:
这时候你应该悟了,其实每个变量(无论是指针变量还是基本数据类型)都应该有两个值,一个是自己的地址值,一个是装(储存)的值,只不过基本类型和指针装的不一样,一个装数据,一个装地址。
对于int a来说,他的地址是0X61,他装的是100,而对于一级指针int p1来说,他的地址是0X62,而他装的是 a的地址0X61,对于int *p2来说,他的地址是0X63,而他装的是 *p1的地址 0X62;
柯南时间到:
现在就来揭秘,指针前面那个 * 有啥用(我们要知道这玩意有啥用,最有利的证据,就是用代码输出结果):
1 |
|
运行结果:
1 | 100, 100, 100, 100 |
我们从结果,再结合书上讲的,就精炼一下嘛,&
表示取取变量的地址符号,*
则表示取值符号,。
- 想要获取指针指向的数据时,一级指针加一个
*
,二级指针加两个*
,三级指针加三个*
,以次类推。 - 而如果指针少一个
*
,就表示,指针指向数据的地址值。 - 而指针不加
*
,就表示自己储存的什么值(你看a是不是就为100,100就是他储存的值嘛)。
结合这个图来看:
我二级指针,有两个*
,就直接可以指到a装的数据了,而少了一个*就代表指向a的地址值(即指向的p1储存的值)。那再少一个就只能指到自己了嘛,那不就是自己储存的p1的地址值吗。
由此我们可以发现,指针的*
就像一个打排位,什么样的段位匹配什么样的段位,几个*
就指向那个值。
- 本文标题:指针到底是个什么鬼,怎么用
- 本文作者:chenQD
- 本文链接:https://www.chenqd.top/2020/08/17/指针到底是个什么鬼,怎么用/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!