zhwm3064 发表于 2014-9-12 08:18:06

指针的本质-间接寻址

我是先学的汇编语言,后学的C语言,所以,我认为C语言的指针就相当于汇编语言的间接寻址。这是C语言非常接近于汇编语言的一个地方。C语言是非常接近于底层的高级语言。汇编语言里面的间接寻址,是把寄存器里的数据当做地址,然后从这个地址里取数据。比如,寄存器里数据是2000,不是直接读取2000这个数,而是从2000这个地址取个数。

myxiaonia 发表于 2014-9-12 08:23:14

是的,就是间接寻址

zhwm3064 发表于 2014-9-12 08:23:42

然后,有一点声明,任何地址的寻址,都包括两种寻址-直接寻址,间接寻址。对应于C语言,任何变量都包含了三种读取方式-读取变量地址,读取变量数据,把变量数据做为地址 读取此地址内的数据

728196 发表于 2014-9-12 08:24:51

本帖最后由 728196 于 2014-9-12 08:29 编辑

理解有误,改掉!

RainKing 发表于 2014-9-12 08:30:55

C语言的指针超出你的想象...........{:lol:}{:lol:}

zhwm3064 发表于 2014-9-12 08:31:59

有个帖子里说,指针的本质是-指针里存放的是地址。我认为这不太确切,因为任何存储单元都可以做为指针来用。所以,指针的本质是把存储单元的数据当做地址,进行二次寻址,取出数据。

limuzi2012 发表于 2014-9-12 08:33:26

想起来刚从汇编转到写C的时候,一直就是把C当汇编写

浪里白条 发表于 2014-9-12 08:37:50

对的,就是间接寻址!

zhwm3064 发表于 2014-9-12 08:52:38

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

gonboy 发表于 2014-9-12 08:59:11

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

同意            

fengyunyu 发表于 2014-9-12 09:00:52

指针本质是地址,用法广泛,指针,指针的指针,函数指针等等。

kevinchen026 发表于 2014-9-12 09:01:57

指针的本质-间接寻址~

kevinchen026 发表于 2014-9-12 09:02:48

mark~         

zhwm3064 发表于 2014-9-12 09:07:21

还有个特例,就是链表菜单,每级菜单对应一级链表,可是菜单不是每个分支都有,表现在链表上,就是在有的链表上出现了空指针,一般通行的做法是,存储数据0000,为什么要这样呢,我认为,可能原因,一旦程序真的寻址到这个空链表上,由于一般0000都是单片机的程序入口,所以,万一出错,相当于单片机重启,不回出现大的故障。

ruanxianwu 发表于 2014-9-12 09:08:48

LZ好人丫丫丫丫丫丫

小行星 发表于 2014-9-12 09:09:35

其实对于编译器和语法来说,就是一个可用于操作地址的变量;实际使用时,编译器对指针的使用和操作限定的很宽泛,因此变得很灵活。

小行星 发表于 2014-9-12 09:12:43

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

activeleo 发表于 2014-9-12 09:13:21

指针是个神奇的东西,玩不好会宕机的!.................................

小行星 发表于 2014-9-12 09:14:36

另外,普通变量的方式,编译器容易控制,像是普通用户,权限低,安全性高。指针则是用户在写符号表的性质,C里几乎完成不受控,因此权限高,安全性低。

JESTER9 发表于 2014-9-12 09:24:30

我也认为,指针可以看做间接寻址。

gmyu 发表于 2014-9-12 09:40:23

如果你编程很多年,发这个帖子是啥意思,学习C,指针就像吃饭拿筷子,基础的东东。哈哈,还在飞思卡尔板块。

黄晨0410 发表于 2014-9-12 09:46:51

活用指针,与结构体写单片机程序感觉就不一样了   个人之见

hgy_tom 发表于 2014-9-12 09:54:19

知道了汇编,学C的指针,就容易理解

sunrundong 发表于 2014-9-12 10:06:00

就是一个寻址方式,不过个人感觉C语言的使用起来更方便

abszy 发表于 2014-9-12 10:19:34

本帖最后由 abszy 于 2014-9-12 10:32 编辑

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

Etual 发表于 2014-9-12 10:27:00

理解没错,就是间接寻址。

承诺媛梦 发表于 2014-9-12 10:33:54

mark,学习

hamxiyue 发表于 2014-9-12 10:39:33

DSP的寻址方式还多些,有些特殊算法配合特殊寻址,更有效率。

szyxyhy 发表于 2014-9-12 10:51:10

我的理解是指针是为了让程序有机会直接操作存储单元

laoshuhunya 发表于 2014-9-12 10:52:48

但愿再过一年二载,楼主或许不会这么认为。

nome 发表于 2014-9-12 11:25:32

有点意思            

ruanxianwu 发表于 2014-9-12 11:37:17

楼主好人丫丫丫丫丫

wangqun 发表于 2014-9-12 11:38:36

这个有点道理,只是用了C,很多习惯不能用汇编的了

WaterToSea 发表于 2014-9-12 13:07:30

指针博大精深,要活学活用

gyqjc 发表于 2014-9-12 13:29:28

有道理,就是用起来复杂了。

唱小沈阳的大海 发表于 2014-9-12 13:36:35

正解。。。当年老师讲了一堆东西。。。。一直不明白,然后自己稍微看下书,发现其实就是这么一回事。。。。当然,用好指针还是超级难的。。。

memstone 发表于 2014-9-12 13:47:49

指针太灵活了,如果不注意的话,很容易把自己绕进去。
好比是中转站,转多了,自己也搞不清楚是到目的站了,还是依然在中转站的路上,甚至搞错了中转站是国内站还是国际站,反正用的层次深了,自己也晕乎乎了,哈哈。{:lol:}

memstone 发表于 2014-9-12 13:49:13

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

他可能很空,或正在偷懒 {:lol:}

erpao 发表于 2014-9-12 15:08:09

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

zhwm3064 发表于 2014-9-12 15:25:20

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

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

zhwm3064 发表于 2014-9-12 15:35:35

当然,指针是个非常复制的东西,我自己也搞不懂指针,虽然程序包含了大量指针,可是绕来绕去,过一段时间,我自己都很难看懂。指针包含两种:一种是利用指针读取数据,程序不会跳转。另一种是根据指针跳转或者调用程序,此时程序发生跳转。

qqwwzzxx 发表于 2014-9-12 16:02:25

学习了。

ALUMEI 发表于 2014-9-12 16:06:48

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

bli19 发表于 2014-9-12 21:53:24

间接寻址不太清楚?但是可以汇编里没有c里那么麻烦,想要读取内存, LDR R0, 。。。想要存储STR(H) R0, R,哪有c这么麻烦,我c超菜啊,指针完全不会。

li4512369 发表于 2014-9-13 00:06:32

的确是间接寻址

zhaotyue 发表于 2014-9-15 12:49:02

学习            
页: [1]
查看完整版本: 指针的本质-间接寻址