世俱杯 2025

登录 免费注册 世俱杯 2025 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

谈谈C语言的指针!

作者:xillinx 栏目:嵌入式系统
谈谈C语言的指针!
我是学汇编语言开始接触程序的,我最先学的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白痴
呵呵,把如何理解指针和访问内存联系,有新意,谢谢
 
3楼: >>参与讨论
jacksting
呵呵
就是这个意思。
也就是c语言里面没有指针,有的只是数值,也就是二进制位。
函数传递的也不过是指针本身的值而已。
只不过这个值在使用前进行一次间接访问而已。

4楼: >>参与讨论
wolaiye3
够精辟
和我们老师讲的有的一比  
让我的理解又深了一步

5楼: >>参与讨论
strongson
C语言中的指针就是汇编语言中的间接寻址,
如果对汇编语言理解得比较深刻的话,学习C语言的指针一般都不会有什么问题。反倒是C++中的“引用”常常令人感觉不舒服。
顺便提到的一个建议:函数的参量应尽量使用指针型变量。这样可以有效避免堆栈溢出漏洞。

6楼: >>参与讨论
hopeasy
谢谢
看了高手的理论,很好

我的

#define data(unsigned int *)(0x1000)

usigned CHAR Addr;
Addr=*data;


7楼: >>参与讨论
smilecome
经典
这样理解,清楚多了,多谢

参与讨论
昵称:
讨论内容:
 
 
相关帖子
PC机UART寄存器中调制解调控制寄存器(MCR)的具体含义
芯片4060是什么作用啊?
转贴:在单片机中嵌入操作系统的利弊
请教关于PC104的外部中断 IRQ9/10/11的获得!!
怎么用一个Const的指针数组存储我的函数地址?


Copyright © 1998-2006 tgdrjb.cn 浙ICP证030469号