前言
众所周知,C语言是较为底层的语言,许多操作是直接对内存进行操作,既然谈到C语言,那就不得不说道C语言的独特之处——指针
针对int *p
进行讲解,当你能理解这3个后,指针就明白了
一、 变量存储过程及原理
1.赋值
结果是9
我们需要知道对于int a = 9;
这句话,计算机做了什么?
定义a
int a
,在内存中开辟了一个int大小的空间,也就是4个字节(32位),然后将这个空间分配给了a,这就是a的空间了
给a赋值
a = 9
,在a的空间里存放9这个数,然后将十进制的9转换成二进制的9
这里存储数据的方式是大端模式,简单来说就是把数据的低字节保存在内存的高地址中,有兴趣的可以了解一下,这里不多赘述
可以看到00001001是我们存储进去的数值,根据大端模式,数据的低字节保存在内存的高地址中,所以就是上图的存储格式
2.外部手动赋值
scanf("%d",&a);
执行这行代码时,输入一个int型的数值,例如8,然后&a
,即找到a的地址,将8转为二进制,存入到a的空间,这也是为什么需要加&
号
总结
一个变量的存储,首先是在内存开辟一个空间,然后把这个空间分配给某一变量,再对变量进行存储
二、 指针变量int *p
1.指针类型
指针类型int *p
,虽然*p
是写在一块的,但是变量名是p
,类型是int *
,也就是整形的指针类型,理清指针类型和变量后,其实已经差不多明白了
结果
可见变量p里存放的是a的地址
错误写法:
一个事指针类型,一个事int类型,是无法相互操作的(类型不匹配)
2.指针存储过程及原理
这一段代码看看计算机是如何运行的
- 可以将int类型变量的地址赋给
int *
指针类型变量 - &是取地址符,&a就是拿到a的地址
总结:
总的来说,就是针对a的空间,给了p一把钥匙,让p也可以对a的那片空间进行操作
指针操作
结果
总结:
除了定义指针变量的时候,变量前面有*
为定义类型
其他时候均为指针的取值操作,注意是取值,不是取地址,拿的是指针变量中存放的值
个人理解,欢迎评论探讨!