|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
谈谈C语言的指针! |
作者:xillinx 栏目:嵌入式系统 |
我是学汇编语言开始接触程序的,我最先学的Z80系统的汇编,后来又了解8086汇编,最后出来工作才学会51汇编。到现在我用到PowerPC处理器时,我还是喜欢在内存拷贝和任务调度上嵌入汇编,来提高指针的运行速度和合理使用指令流水,尽量避免来回跳转把cache里的指令打乱。 我很喜欢使用指针,所以带同事时也要求他们必须熟悉使用指针,后来我得一位同事问我,C指针到底是什么? 我才明白原来他一直在糊涂的使用指针。 应该这么说:CPU访问内存(也就是RAM或者ROM等)需要两样重要的东西,一就是8~32根数据线,用来把内存的数据放到寄存器或者其他地方。二是需要N根地址线,把希望读取或者写入的内存单元选中。那么C语言的指针保存的数据就是要送到地址线上来选中内存单元。C语言的变量保存的东西与数据线来打交道的。 比如: unsigned int *Addr; Addr =(unsigned int *)0xfff7e00; *Addr=0x678934; 也就是说CPU先把0xfff7e00送到地址线上,然后把0x678934要送数据线上,然后送出写信号等控制信号,就完成了上面的操作。 同样指向指针的指针的意思就是把从数据线上读出来的数据当做地址送到地址线上去。 比如: unsigned CHAR data; unsigned int **Addr; Addr =(unsigned int **)&data; *Addr =&data; |
2楼: | >>参与讨论 |
作者: arm白痴 于 2005/3/9 15:42:00 发布:
呵呵,把如何理解指针和访问内存联系,有新意,谢谢 |
3楼: | >>参与讨论 |
作者: jacksting 于 2005/3/9 17:52:00 发布:
呵呵 就是这个意思。 也就是c语言里面没有指针,有的只是数值,也就是二进制位。 函数传递的也不过是指针本身的值而已。 只不过这个值在使用前进行一次间接访问而已。 |
4楼: | >>参与讨论 |
作者: wolaiye3 于 2005/3/11 20:48:00 发布:
够精辟 和我们老师讲的有的一比 让我的理解又深了一步 |
5楼: | >>参与讨论 |
作者: strongson 于 2005/3/12 14:21:00 发布:
C语言中的指针就是汇编语言中的间接寻址, 如果对汇编语言理解得比较深刻的话,学习C语言的指针一般都不会有什么问题。反倒是C++中的“引用”常常令人感觉不舒服。 顺便提到的一个建议:函数的参量应尽量使用指针型变量。这样可以有效避免堆栈溢出漏洞。 |
6楼: | >>参与讨论 |
作者: hopeasy 于 2005/3/19 15:44:00 发布:
谢谢 看了高手的理论,很好 我的 #define data(unsigned int *)(0x1000) usigned CHAR Addr; Addr=*data; |
7楼: | >>参与讨论 |
作者: smilecome 于 2005/3/19 20:26:00 发布:
经典 这样理解,清楚多了,多谢 |
|
|
Copyright © 1998-2006 tgdrjb.cn 浙ICP证030469号 |