指针的本质-间接寻址
我是先学的汇编语言,后学的C语言,所以,我认为C语言的指针就相当于汇编语言的间接寻址。这是C语言非常接近于汇编语言的一个地方。C语言是非常接近于底层的高级语言。汇编语言里面的间接寻址,是把寄存器里的数据当做地址,然后从这个地址里取数据。比如,寄存器里数据是2000,不是直接读取2000这个数,而是从2000这个地址取个数。 是的,就是间接寻址 然后,有一点声明,任何地址的寻址,都包括两种寻址-直接寻址,间接寻址。对应于C语言,任何变量都包含了三种读取方式-读取变量地址,读取变量数据,把变量数据做为地址 读取此地址内的数据 本帖最后由 728196 于 2014-9-12 08:29 编辑理解有误,改掉! C语言的指针超出你的想象...........{:lol:}{:lol:} 有个帖子里说,指针的本质是-指针里存放的是地址。我认为这不太确切,因为任何存储单元都可以做为指针来用。所以,指针的本质是把存储单元的数据当做地址,进行二次寻址,取出数据。 想起来刚从汇编转到写C的时候,一直就是把C当汇编写 对的,就是间接寻址! 不管是汇编语言还是C语言,给人的感觉是,为什么搞的这么复杂,我用到什么地址或者数据,直接取不就得了。其实不是,多于许多批量数据操作,循环数据操作,用指针,可以大大简化程序,只需要修改指针,自动增量或者减量,程序体不变。否则,每取一个数都要直接改地址,程序会很大。比如,当前我用的这个安卓手机,我把一个文件从一个文件夹移动到另一个文件夹,只需要0.1秒就移动了,实际上,就是用的链表方式,本质还是指针,把文件指向另一个文件夹就行了,其实文件的实际存储位置根本没有变。 zhwm3064 发表于 2014-9-12 08:52
不管是汇编语言还是C语言,给人的感觉是,为什么搞的这么复杂,我用到什么地址或者数据,直接取不就得了。 ...
同意 指针本质是地址,用法广泛,指针,指针的指针,函数指针等等。 指针的本质-间接寻址~ mark~ 还有个特例,就是链表菜单,每级菜单对应一级链表,可是菜单不是每个分支都有,表现在链表上,就是在有的链表上出现了空指针,一般通行的做法是,存储数据0000,为什么要这样呢,我认为,可能原因,一旦程序真的寻址到这个空链表上,由于一般0000都是单片机的程序入口,所以,万一出错,相当于单片机重启,不回出现大的故障。 LZ好人丫丫丫丫丫丫 其实对于编译器和语法来说,就是一个可用于操作地址的变量;实际使用时,编译器对指针的使用和操作限定的很宽泛,因此变得很灵活。 编译器本身,任何有类型的地址(符号表),都是通过地址来访问处理的。例如:变量是地址加类型。指针如此灵活,实际是编译器开发的一个超管。变量既可以以普通权限操作,也可以用超过操作。 指针是个神奇的东西,玩不好会宕机的!................................. 另外,普通变量的方式,编译器容易控制,像是普通用户,权限低,安全性高。指针则是用户在写符号表的性质,C里几乎完成不受控,因此权限高,安全性低。 我也认为,指针可以看做间接寻址。 如果你编程很多年,发这个帖子是啥意思,学习C,指针就像吃饭拿筷子,基础的东东。哈哈,还在飞思卡尔板块。 活用指针,与结构体写单片机程序感觉就不一样了 个人之见 知道了汇编,学C的指针,就容易理解 就是一个寻址方式,不过个人感觉C语言的使用起来更方便 本帖最后由 abszy 于 2014-9-12 10:32 编辑
你只需要记住:指针就是指向一个存储器的地址
理解没错,就是间接寻址。 mark,学习 DSP的寻址方式还多些,有些特殊算法配合特殊寻址,更有效率。 我的理解是指针是为了让程序有机会直接操作存储单元 但愿再过一年二载,楼主或许不会这么认为。 有点意思 楼主好人丫丫丫丫丫 这个有点道理,只是用了C,很多习惯不能用汇编的了 指针博大精深,要活学活用 有道理,就是用起来复杂了。 正解。。。当年老师讲了一堆东西。。。。一直不明白,然后自己稍微看下书,发现其实就是这么一回事。。。。当然,用好指针还是超级难的。。。 指针太灵活了,如果不注意的话,很容易把自己绕进去。
好比是中转站,转多了,自己也搞不清楚是到目的站了,还是依然在中转站的路上,甚至搞错了中转站是国内站还是国际站,反正用的层次深了,自己也晕乎乎了,哈哈。{:lol:} gmyu 发表于 2014-9-12 09:40
如果你编程很多年,发这个帖子是啥意思,学习C,指针就像吃饭拿筷子,基础的东东。哈哈,还在飞思卡尔板块 ...
他可能很空,或正在偷懒 {:lol:} 指针型指针,指针型数组,数组型指针,就不好这样对应了。另外,数组其实也是指针的具体应用,数组变量地址,就是指向数组首地址的指针。
没法返回来对应汇编的寻址,用指针还
是不能偷懒。
我一直纠结point翻译成指针,中文概念很不能直接理解。
我认为point翻译成变量向量更好理解,中断地址不也是翻译成中断向量的。
中断向量就是一个中断的固定地址,由硬件决定。
指向变量的向量(地址),就是指针本身。
我自己是这样理解的,才在初期迅速掌握指针概念。 gmyu 发表于 2014-9-12 09:40
如果你编程很多年,发这个帖子是啥意思,学习C,指针就像吃饭拿筷子,基础的东东。哈哈,还在飞思卡尔板块 ...
为什么发这个帖子,是因为我看了另一个帖子,大意是说,指针是用来存放地址的。我认为不确切,因为每个存储单元都可以当做指针来用,那么是否可以说每个存储单元存放的都是地址,显然不是。指针是个名词,如果用个动词-指向,也许确切些-指向数据对应的地址。指针里存放的还是数据,只不过,加上指针这个特殊指令,就指向数据所对应的地址去了。 当然,指针是个非常复制的东西,我自己也搞不懂指针,虽然程序包含了大量指针,可是绕来绕去,过一段时间,我自己都很难看懂。指针包含两种:一种是利用指针读取数据,程序不会跳转。另一种是根据指针跳转或者调用程序,此时程序发生跳转。 学习了。 指针就是一个变量,这样子用没错的;当你有天发现我前面的那句话不对的时候,那恭喜你,你自己对指针就有很深的理解了!
PS:指针本身没那么难,但如果用指针的地方的环境比较复杂,比如用了各种各样的数据结构,就显得有点难理解了。 间接寻址不太清楚?但是可以汇编里没有c里那么麻烦,想要读取内存, LDR R0, 。。。想要存储STR(H) R0, R,哪有c这么麻烦,我c超菜啊,指针完全不会。 的确是间接寻址 学习
页:
[1]