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