搜索
bottom↓
回复: 45

指针的本质-间接寻址

[复制链接]

出0入0汤圆

发表于 2014-9-12 08:18:06 来自手机 | 显示全部楼层 |阅读模式
我是先学的汇编语言,后学的C语言,所以,我认为C语言的指针就相当于汇编语言的间接寻址。这是C语言非常接近于汇编语言的一个地方。C语言是非常接近于底层的高级语言。汇编语言里面的间接寻址,是把寄存器里的数据当做地址,然后从这个地址里取数据。比如,寄存器里数据是2000,不是直接读取2000这个数,而是从2000这个地址取个数。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2014-9-12 08:23:14 | 显示全部楼层
是的,就是间接寻址

出0入0汤圆

 楼主| 发表于 2014-9-12 08:23:42 来自手机 | 显示全部楼层
然后,有一点声明,任何地址的寻址,都包括两种寻址-直接寻址,间接寻址。对应于C语言,任何变量都包含了三种读取方式-读取变量地址,读取变量数据,把变量数据做为地址 读取此地址内的数据

出0入0汤圆

发表于 2014-9-12 08:24:51 | 显示全部楼层
本帖最后由 728196 于 2014-9-12 08:29 编辑

理解有误,改掉!

出0入0汤圆

发表于 2014-9-12 08:30:55 | 显示全部楼层
C语言的指针超出你的想象...........

出0入0汤圆

 楼主| 发表于 2014-9-12 08:31:59 来自手机 | 显示全部楼层
有个帖子里说,指针的本质是-指针里存放的是地址。我认为这不太确切,因为任何存储单元都可以做为指针来用。所以,指针的本质是把存储单元的数据当做地址,进行二次寻址,取出数据。

出0入0汤圆

发表于 2014-9-12 08:33:26 | 显示全部楼层
想起来刚从汇编转到写C的时候,一直就是把C当汇编写

出0入0汤圆

发表于 2014-9-12 08:37:50 | 显示全部楼层
对的,就是间接寻址!

出0入0汤圆

 楼主| 发表于 2014-9-12 08:52:38 来自手机 | 显示全部楼层
不管是汇编语言还是C语言,给人的感觉是,为什么搞的这么复杂,我用到什么地址或者数据,直接取不就得了。其实不是,多于许多批量数据操作,循环数据操作,用指针,可以大大简化程序,只需要修改指针,自动增量或者减量,程序体不变。否则,每取一个数都要直接改地址,程序会很大。比如,当前我用的这个安卓手机,我把一个文件从一个文件夹移动到另一个文件夹,只需要0.1秒就移动了,实际上,就是用的链表方式,本质还是指针,把文件指向另一个文件夹就行了,其实文件的实际存储位置根本没有变。

出10入46汤圆

发表于 2014-9-12 08:59:11 | 显示全部楼层
zhwm3064 发表于 2014-9-12 08:52
不管是汇编语言还是C语言,给人的感觉是,为什么搞的这么复杂,我用到什么地址或者数据,直接取不就得了。 ...

同意            

出100入101汤圆

发表于 2014-9-12 09:00:52 | 显示全部楼层
指针本质是地址,用法广泛,指针,指针的指针,函数指针等等。

出0入0汤圆

发表于 2014-9-12 09:01:57 | 显示全部楼层
指针的本质-间接寻址~

出0入0汤圆

发表于 2014-9-12 09:02:48 | 显示全部楼层
mark~           

出0入0汤圆

 楼主| 发表于 2014-9-12 09:07:21 来自手机 | 显示全部楼层
还有个特例,就是链表菜单,每级菜单对应一级链表,可是菜单不是每个分支都有,表现在链表上,就是在有的链表上出现了空指针,一般通行的做法是,存储数据0000,为什么要这样呢,我认为,可能原因,一旦程序真的寻址到这个空链表上,由于一般0000都是单片机的程序入口,所以,万一出错,相当于单片机重启,不回出现大的故障。

出0入0汤圆

发表于 2014-9-12 09:08:48 | 显示全部楼层
LZ好人丫丫丫丫丫丫

出0入0汤圆

发表于 2014-9-12 09:09:35 | 显示全部楼层
其实对于编译器和语法来说,就是一个可用于操作地址的变量;实际使用时,编译器对指针的使用和操作限定的很宽泛,因此变得很灵活。

出0入0汤圆

发表于 2014-9-12 09:12:43 | 显示全部楼层
编译器本身,任何有类型的地址(符号表),都是通过地址来访问处理的。例如:变量是地址加类型。指针如此灵活,实际是编译器开发的一个超管。变量既可以以普通权限操作,也可以用超过操作。

出0入0汤圆

发表于 2014-9-12 09:13:21 | 显示全部楼层
指针是个神奇的东西,玩不好会宕机的!.................................

出0入0汤圆

发表于 2014-9-12 09:14:36 | 显示全部楼层
另外,普通变量的方式,编译器容易控制,像是普通用户,权限低,安全性高。指针则是用户在写符号表的性质,C里几乎完成不受控,因此权限高,安全性低。

出0入0汤圆

发表于 2014-9-12 09:24:30 | 显示全部楼层
我也认为,指针可以看做间接寻址。

出0入4汤圆

发表于 2014-9-12 09:40:23 | 显示全部楼层
如果你编程很多年,发这个帖子是啥意思,学习C,指针就像吃饭拿筷子,基础的东东。哈哈,还在飞思卡尔板块。

出0入0汤圆

发表于 2014-9-12 09:46:51 | 显示全部楼层
活用指针,与结构体  写单片机程序感觉就不一样了   个人之见

出0入0汤圆

发表于 2014-9-12 09:54:19 | 显示全部楼层
知道了汇编,学C的指针,就容易理解

出0入0汤圆

发表于 2014-9-12 10:06:00 | 显示全部楼层
就是一个寻址方式,不过个人感觉C语言的使用起来更方便

出0入0汤圆

发表于 2014-9-12 10:19:34 | 显示全部楼层
本帖最后由 abszy 于 2014-9-12 10:32 编辑

你只需要记住:指针就是指向一个存储器的地址

出0入0汤圆

发表于 2014-9-12 10:27:00 | 显示全部楼层
理解没错,就是间接寻址。

出0入0汤圆

发表于 2014-9-12 10:33:54 | 显示全部楼层
mark,学习

出0入0汤圆

发表于 2014-9-12 10:39:33 | 显示全部楼层
DSP的寻址方式还多些,有些特殊算法配合特殊寻址,更有效率。

出0入0汤圆

发表于 2014-9-12 10:51:10 | 显示全部楼层
我的理解是指针是为了让程序有机会直接操作存储单元

出0入0汤圆

发表于 2014-9-12 10:52:48 | 显示全部楼层
但愿再过一年二载,楼主或许不会这么认为。

出0入0汤圆

发表于 2014-9-12 11:25:32 | 显示全部楼层
有点意思              

出0入0汤圆

发表于 2014-9-12 11:37:17 | 显示全部楼层
楼主好人丫丫丫丫丫

出0入0汤圆

发表于 2014-9-12 11:38:36 | 显示全部楼层
这个有点道理,只是用了C,很多习惯不能用汇编的了

出0入0汤圆

发表于 2014-9-12 13:07:30 | 显示全部楼层
指针博大精深,要活学活用

出0入0汤圆

发表于 2014-9-12 13:29:28 来自手机 | 显示全部楼层
有道理,就是用起来复杂了。

出0入0汤圆

发表于 2014-9-12 13:36:35 | 显示全部楼层
正解。。。当年老师讲了一堆东西。。。。一直不明白,然后自己稍微看下书,发现其实就是这么一回事。。。。当然,用好指针还是超级难的。。。

出110入93汤圆

发表于 2014-9-12 13:47:49 | 显示全部楼层
指针太灵活了,如果不注意的话,很容易把自己绕进去。
好比是中转站,转多了,自己也搞不清楚是到目的站了,还是依然在中转站的路上,甚至搞错了中转站是国内站还是国际站,反正用的层次深了,自己也晕乎乎了,哈哈。

出110入93汤圆

发表于 2014-9-12 13:49:13 | 显示全部楼层
gmyu 发表于 2014-9-12 09:40
如果你编程很多年,发这个帖子是啥意思,学习C,指针就像吃饭拿筷子,基础的东东。哈哈,还在飞思卡尔板块 ...

他可能很空,或正在偷懒

出0入0汤圆

发表于 2014-9-12 15:08:09 来自手机 | 显示全部楼层
指针型指针,指针型数组,数组型指针,就不好这样对应了。另外,数组其实也是指针的具体应用,数组变量地址,就是指向数组首地址的指针。
没法返回来对应汇编的寻址,用指针还
是不能偷懒。
我一直纠结point翻译成指针,中文概念很不能直接理解。
我认为point翻译成变量向量更好理解,中断地址不也是翻译成中断向量的。
中断向量就是一个中断的固定地址,由硬件决定。
指向变量的向量(地址),就是指针本身。
我自己是这样理解的,才在初期迅速掌握指针概念。

出0入0汤圆

 楼主| 发表于 2014-9-12 15:25:20 来自手机 | 显示全部楼层
gmyu 发表于 2014-9-12 09:40
如果你编程很多年,发这个帖子是啥意思,学习C,指针就像吃饭拿筷子,基础的东东。哈哈,还在飞思卡尔板块 ...

为什么发这个帖子,是因为我看了另一个帖子,大意是说,指针是用来存放地址的。我认为不确切,因为每个存储单元都可以当做指针来用,那么是否可以说每个存储单元存放的都是地址,显然不是。指针是个名词,如果用个动词-指向,也许确切些-指向数据对应的地址。指针里存放的还是数据,只不过,加上指针这个特殊指令,就指向数据所对应的地址去了。

出0入0汤圆

 楼主| 发表于 2014-9-12 15:35:35 来自手机 | 显示全部楼层
当然,指针是个非常复制的东西,我自己也搞不懂指针,虽然程序包含了大量指针,可是绕来绕去,过一段时间,我自己都很难看懂。指针包含两种:一种是利用指针读取数据,程序不会跳转。另一种是根据指针跳转或者调用程序,此时程序发生跳转。

出0入0汤圆

发表于 2014-9-12 16:02:25 | 显示全部楼层
学习了。

出0入0汤圆

发表于 2014-9-12 16:06:48 | 显示全部楼层
指针就是一个变量,这样子用没错的;当你有天发现我前面的那句话不对的时候,那恭喜你,你自己对指针就有很深的理解了!
PS:指针本身没那么难,但如果用指针的地方的环境比较复杂,比如用了各种各样的数据结构,就显得有点难理解了。

出0入0汤圆

发表于 2014-9-12 21:53:24 | 显示全部楼层
间接寻址不太清楚?但是可以汇编里没有c里那么麻烦,想要读取内存, LDR R0, [R1]。。。想要存储STR(H) R0, R[1],哪有c这么麻烦,我c超菜啊,指针完全不会。

出0入0汤圆

发表于 2014-9-13 00:06:32 | 显示全部楼层
的确是间接寻址

出0入0汤圆

发表于 2014-9-15 12:49:02 来自手机 | 显示全部楼层
学习            
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-9 21:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表