計(jì)算機(jī)組成原理→DOS命令→匯編語(yǔ)言→C語(yǔ)言(不包括C++)、代碼書寫規(guī)范→數(shù)據(jù)結(jié)構(gòu)、編譯原理、操作系統(tǒng)→計(jì)算機(jī)網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)原理、正則表達(dá)式→其它語(yǔ)言(包括C++)、架構(gòu)……
對(duì)學(xué)習(xí)編程者的忠告:
眼過(guò)千遍不如手過(guò)一遍!
書看千行不如手敲一行!
手敲千行不如單步一行!
單步源代碼千行不如單步對(duì)應(yīng)匯編一行!
VC調(diào)試時(shí)按Alt+8、Alt+7、Alt+6和Alt+5,打開(kāi)匯編窗口、堆棧窗口、內(nèi)存窗口和寄存器窗口看每句C對(duì)應(yīng)的匯編、單步執(zhí)行并觀察相應(yīng)堆棧、內(nèi)存和寄存器變化,這樣過(guò)一遍不就啥都明白了嗎。
對(duì)VC來(lái)說(shuō),所謂‘調(diào)試時(shí)’就是編譯連接通過(guò)以后,按F10或F11鍵單步執(zhí)行一步以后的時(shí)候,或者在某行按F9設(shè)了斷點(diǎn)后按F5執(zhí)行停在該斷點(diǎn)處的時(shí)候。
(Turbo C或Borland C用Turbo Debugger調(diào)試,Linux或Unix下用GDB調(diào)試時(shí),看每句C對(duì)應(yīng)的匯編并單步執(zhí)行觀察相應(yīng)內(nèi)存和寄存器變化。)
想要從本質(zhì)上理解C指針,必須學(xué)習(xí)匯編以及C和匯編的對(duì)應(yīng)關(guān)系。
從匯編的角度理解和學(xué)習(xí)C語(yǔ)言的指針,原本看似復(fù)雜的東西就會(huì)變得非常簡(jiǎn)單!
指針即地址?!暗刂酚质巧??”“只能從匯編語(yǔ)言和計(jì)算機(jī)組成原理的角度去解釋了?!?/span>
但我又不得不承認(rèn):
有那么些人喜歡或者適合用“先具體再抽象”的方法學(xué)習(xí)和理解復(fù)雜事物;
而另一些人喜歡或者適合用“先抽象再具體”的方法學(xué)習(xí)和理解復(fù)雜事物。
而我本人屬前者。
不要企圖依賴輸出指針相關(guān)表達(dá)式的值【比如printf("%p\n",...)】來(lái)理解指針的本質(zhì),
而要依賴調(diào)試時(shí)的反匯編窗口中的C/C++代碼【比如void *p=...】及其對(duì)應(yīng)匯編指令以及內(nèi)存窗口中的內(nèi)存地址和內(nèi)存值來(lái)理解指針的本質(zhì)。
這輩子不看內(nèi)存地址和內(nèi)存值;只畫鏈表、指針示意圖,畫堆棧示意圖,畫各種示意圖,甚至自己沒(méi)畫過(guò)而只看過(guò)書上的圖……能從本質(zhì)上理解指針、理解函數(shù)參數(shù)傳遞嗎?本人深表懷疑!
這輩子不種麥不收麥不將麥粒拿去磨面;只吃饅頭、吃面條、吃面包、……甚至從沒(méi)看過(guò)別人怎么蒸饅頭,壓面條,烤面包,……能從本質(zhì)上理解面粉、理解面食嗎?本人深表懷疑!!
提醒:
“學(xué)習(xí)用匯編語(yǔ)言寫程序”
和
“VC調(diào)試(TC或BC用TD調(diào)試)時(shí)按Alt+8、Alt+7、Alt+6和Alt+5,打開(kāi)匯編窗口、堆棧窗口、內(nèi)存窗口和寄存器窗口看每句C對(duì)應(yīng)的匯編、單步執(zhí)行并觀察相應(yīng)堆棧、內(nèi)存和寄存器變化,這樣過(guò)一遍不就啥都明白了嗎。
(Linux或Unix下可以在用GDB調(diào)試時(shí),看每句C對(duì)應(yīng)的匯編并單步執(zhí)行觀察相應(yīng)內(nèi)存和寄存器變化。)
想要從本質(zhì)上理解C指針,必須學(xué)習(xí)C和匯編的對(duì)應(yīng)關(guān)系?!?/span>
不是一回事!
不要迷信書、考題、老師、回帖;
要迷信CPU、編譯器、調(diào)試器、運(yùn)行結(jié)果。
并請(qǐng)結(jié)合“盲人摸太陽(yáng)”和“駕船出海時(shí)一定只帶一個(gè)指南針?!奔右岳斫狻?/span>
任何理論、權(quán)威、傳說(shuō)、真理、標(biāo)準(zhǔn)、解釋、想象、知識(shí)……都比不上擺在眼前的事實(shí)!
有人說(shuō)一套做一套,你相信他說(shuō)的還是相信他做的?
其實(shí)嚴(yán)格來(lái)說(shuō)這個(gè)世界上古往今來(lái)所有人都是說(shuō)一套做一套,不是嗎?
不要寫連自己也預(yù)測(cè)不了結(jié)果的代碼!
電腦內(nèi)存或文件內(nèi)容只是一個(gè)一維二進(jìn)制字節(jié)數(shù)組及其對(duì)應(yīng)的二進(jìn)制地址;
人腦才將電腦內(nèi)存或文件內(nèi)容中的這個(gè)一維二進(jìn)制字節(jié)數(shù)組及其對(duì)應(yīng)的二進(jìn)制地址的某些部分看成是整數(shù)、有符號(hào)數(shù)/無(wú)符號(hào)數(shù)、浮點(diǎn)數(shù)、復(fù)數(shù)、英文字母、阿拉伯?dāng)?shù)字、中文/韓文/法文……字符/字符串、匯編指令、函數(shù)、函數(shù)參數(shù)、堆、棧、數(shù)組、指針、數(shù)組指針、指針數(shù)組、數(shù)組的數(shù)組、指針的指針、二維數(shù)組、字符點(diǎn)陣、字符筆畫的坐標(biāo)、黑白二值圖片、灰度圖片、彩色圖片、錄音、視頻、指紋信息、身份證信息……
十字鏈表交換任意兩個(gè)節(jié)點(diǎn)C源代碼(C指針應(yīng)用終極挑戰(zhàn))http://download.csdn.net/detail/zhao4zhong1/5532495
聯(lián)系客服