【C语言】一文彻底理解指针,通俗易懂

前言

众所周知,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的那片空间进行操作

指针操作

在这里插入图片描述结果
在这里插入图片描述

总结:
除了定义指针变量的时候,变量前面有*为定义类型
其他时候均为指针的取值操作,注意是取值不是取地址,拿的是指针变量中存放的值




个人理解,欢迎评论探讨!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值