|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
談談C語言的指針! |
| 作者:xillinx 欄目:嵌入式系統(tǒng) |
我是學匯編語言開始接觸程序的,我最先學的Z80系統(tǒng)的匯編,后來又了解8086匯編,最后出來工作才學會51匯編。到現(xiàn)在我用到PowerPC處理器時,我還是喜歡在內(nèi)存拷貝和任務調(diào)度上嵌入?yún)R編,來提高指針的運行速度和合理使用指令流水,盡量避免來回跳轉(zhuǎn)把cache里的指令打亂。 我很喜歡使用指針,所以帶同事時也要求他們必須熟悉使用指針,后來我得一位同事問我,C指針到底是什么? 我才明白原來他一直在糊涂的使用指針。 應該這么說:CPU訪問內(nèi)存(也就是RAM或者ROM等)需要兩樣重要的東西,一就是8~32根數(shù)據(jù)線,用來把內(nèi)存的數(shù)據(jù)放到寄存器或者其他地方。二是需要N根地址線,把希望讀取或者寫入的內(nèi)存單元選中。那么C語言的指針保存的數(shù)據(jù)就是要送到地址線上來選中內(nèi)存單元。C語言的變量保存的東西與數(shù)據(jù)線來打交道的。 比如: unsigned int *Addr; Addr =(unsigned int *)0xfff7e00; *Addr=0x678934; 也就是說CPU先把0xfff7e00送到地址線上,然后把0x678934要送數(shù)據(jù)線上,然后送出寫信號等控制信號,就完成了上面的操作。 同樣指向指針的指針的意思就是把從數(shù)據(jù)線上讀出來的數(shù)據(jù)當做地址送到地址線上去。 比如: unsigned CHAR data; unsigned int **Addr; Addr =(unsigned int **)&data; *Addr =&data; |
| 2樓: | >>參與討論 |
| 作者: arm白癡 于 2005/3/9 15:42:00 發(fā)布:
呵呵,把如何理解指針和訪問內(nèi)存聯(lián)系,有新意,謝謝 |
|
| 3樓: | >>參與討論 |
| 作者: jacksting 于 2005/3/9 17:52:00 發(fā)布:
呵呵 就是這個意思。 也就是c語言里面沒有指針,有的只是數(shù)值,也就是二進制位。 函數(shù)傳遞的也不過是指針本身的值而已。 只不過這個值在使用前進行一次間接訪問而已。 |
|
| 4樓: | >>參與討論 |
| 作者: wolaiye3 于 2005/3/11 20:48:00 發(fā)布:
夠精辟 和我們老師講的有的一比 讓我的理解又深了一步 |
|
| 5樓: | >>參與討論 |
| 作者: strongson 于 2005/3/12 14:21:00 發(fā)布:
C語言中的指針就是匯編語言中的間接尋址, 如果對匯編語言理解得比較深刻的話,學習C語言的指針一般都不會有什么問題。反倒是C++中的“引用”常常令人感覺不舒服。 順便提到的一個建議:函數(shù)的參量應盡量使用指針型變量。這樣可以有效避免堆棧溢出漏洞。 |
|
| 6樓: | >>參與討論 |
| 作者: hopeasy 于 2005/3/19 15:44:00 發(fā)布:
謝謝 看了高手的理論,很好 我的 #define data(unsigned int *)(0x1000) usigned CHAR Addr; Addr=*data; |
|
| 7樓: | >>參與討論 |
| 作者: smilecome 于 2005/3/19 20:26:00 發(fā)布:
經(jīng)典 這樣理解,清楚多了,多謝 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 udpf.com.cn 浙ICP證030469號 |