【C/C++教程】指针,指向何方?
2021/6/6 1:23:42
本文主要是介绍【C/C++教程】指针,指向何方?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一说到指针
可能大家的心里
就不止一句mmp要讲了
各种***号让人欲罢不能
指来指去指到你怀疑人生
各种停止运行简直扎心
各种函数指针,数组指针
简直不能再骚
传说最难,还没有之一
那么,指针究竟为何物?
有那么难?难以上青天?
容我说一句
传说终究是传说
今天就来跟大家简单聊一聊
![watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=](/upload/202106/06/202106060123405628.png)
何为指针?
指针并不神秘,理解指针
我更推荐从本质上去理解
什么是指针?
一种数据类型
既然是数据类型
就跟int,float,double一样
可以用来定义变量
那么,这种类型的变量存的是什么?
内存地址
对,我们要时刻牢记这两点
指针是一种数据类型
这种类型的变量存的是内存地址
我觉得很多人不理解指针
无非就是,不理解内存地址
然后将值和址的关系搞混
所以,在这里有必要跟大家科普一下
内存地址的相关知识
简单来说,内存可以简化为下面的模型
当然,这只是为了方便说明问题
实际内存的划分还是蛮复杂的
![watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=](/upload/202106/06/202106060123410017.png)
内存是干嘛的?
单纯点,存数据的呗
内存是由很多很多比特位组成的呀
比特位是什么呢?二进制位嘛
通电时为1,不通电时为0
比如下面这个图
![watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=](/upload/202106/06/202106060123414270.png)
上面就是一排过去的比特位
每个位只有两种状态0 or 1
那么,我们规定
一个字节=8个比特位
然后将内存中排列的比特位
按照字节来编号
于是,有了下面这张图
![watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=](/upload/202106/06/202106060123420564.png)
于是,重点来了
这里的编号
其实就是我们上面说的内存地址
那么指针就是用来存这玩意儿的
(0x表示十六进制,再问自杀)
所以,数在内存中
就是这么存的呀
比如18二进制是00010010
就是像上面一样丢进内存的
(实际存储中,整数,
小数都有自己的一套方式,
比如整数是补码形式存的,
这里就不展开了。)
经过上面的简单叙述
相信大家对内存地址有了一定的了解
对于指针
我的建议还是抓住本质
指针是什么?一种变量类型
这种类型的变量存的是什么?
内存地址
至于教科书上那些
房子和地址什么的
忘了它吧......
理解地址和变量名的关系
先来看看一个例子吧
int a = 100;这是干什么呢?
定义一个int类型的变量
定义变量嘛,就是告诉系统妈妈
我要存一个整数100
你给分配一块内存出来
那好啊,内存分配出来了
但是怎么找到它呢?这个简单
直接通过变量名去找嘛
但是系统妈妈还给了一种方式
她还给了我们一个内存地址
比如下面的这个
假如给我们的变量a的地址是0x77FFA,但是不对啊
int不是占4个字节吗?0x77FFA指向的内存空间
不是只有一个字节吗?
哎,起始地址嘛。为什么指针类型有int*,float*等等?
就是告诉你,我存的是一块内存区域的起始地址
这块区域有多大?取决于类型嘛
然后,int *p = &a;这又是干啥呢?
抓住两点,p是什么?指针类型的变量
p存的是什么?变量a的地址呀
于是乎,p便指向了变量a
(&a表示取a的内存地址,再问自杀)
于是,我们有下图:
然后,我们就可以通过指针p来访问a了
*p = 99;这又是什么意思?
*和指针变量结合
就是访问指针变量指向的那块内存空间嘛
然后通过这种方式
我们就可以把99重新放进0x77FFA这块内存空间里
然后a的值就相应修改为了99
好了,通过上面的例子
我们了解到了指针的本质
其实对于什么指针数组,数组指针
函数指针等等
抓住其本质,多加练习也很容易明白
总之,最大的难点就是,区分
指针变量,和指针变量指向的那块内存
指针有何用
很简单粗暴的一个例子
外挂怎么做的
金钱肯定是变量存的吧
那你找到那个变量的地址
想怎么改就怎么改
呃......当然指针不是这么用的
当初学C的时候
也在烦,既然有变量名
为什么还要整个指针这蛋疼的玩意儿
后来遇到了数组
只需要数组名+下标就可以轻松访问数组中的某个元素
其实大家都知道,数组名+下标其实相当指针+偏移,
第一次感受到指针的威力
再后来遇到函数
传指针可以修改函数外的变量
不由得对指针的好感大增
再再后来学了数据结构
被结构体通过指针环环相连的美感彻底征服
在茫茫的内存大海中
是指针将我们相互连接起来
无论对象被new到了哪里
我总能找到你
这才是指针
1
END
1
后记:尽管很罗嗦,以上纯属个人不成熟的理解。如有错误,谢谢指正!也希望能带给大家一点小小的帮助!
这篇关于【C/C++教程】指针,指向何方?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-30uniAPP 实现全屏左右滚动滚动的效果-icode9专业技术文章分享
- 2024-06-30如何在本地使用授权或插件-icode9专业技术文章分享
- 2024-06-30伪静态规则配置方法汇总-icode9专业技术文章分享
- 2024-06-29易优CMS安装常见问题汇总-icode9专业技术文章分享
- 2024-06-28易优新手必读安装教程-icode9专业技术文章分享
- 2024-06-28忘记eyoucms后台密码怎么办?-icode9专业技术文章分享
- 2024-06-26终极指南:Scrum中如何设置需求优先级
- 2024-06-26AI大模型企业应用实战(25)-为Langchain Agent添加记忆功能
- 2024-06-26小白家庭 nas 搭建方案-icode9专业技术文章分享
- 2024-06-23AI大模型企业应用实战(14)-langchain的Embedding