綜合研究2
之函式名定址
研究過程:
通過之前的研究學習,我們得出了這樣乙個結論,函式名即組合語言中的標號,標號則就應該具有位址的屬性,但就本質而言,無論是位址,還是資料而言,都其實應該是乙個概念,以及針對於他們,同樣的要有這樣的乙個問題要問:
位址在哪?
資料(位址)有多大?
這是在學習組合語言的時候我們應該關注的乙個重要問題,只有掌握了這兩點才算是對資料本身以及記憶體有了乙個清晰的認知。那麼對映到c語言中來,第二個問題就變成了這樣:資料型別是什麼?
那麼對於函式名而言,我們同樣要問這個問題,我們之前在進行彙編程式設計的時候,通常的我們只關注標號的偏移位址,以至於容易導致我們容易忽略這樣乙個事實:無論是變數,還是標號,本質屬性是都是有其實體地址的!
所以這個研究的任務是讓我們認識到上述問題所在。
研究任務讓我們能夠輸出函式名的段位址和偏移位址。
開始的時候並沒有認識到事物的本質特徵:即對於乙個函式名,或者稱之為標號而言,我們並沒與認識到,它本身就同時具有段位址和偏移位址這樣的乙個屬性,或者說的更清楚的一點,就是,它是有資料型別的的!!!,而且,段位址和偏移位址共8位,它是乙個長整形資料!!
認識到這一點問題就變得很容易了
我使用了這樣的語句:printf(「%lx\n」,(long)f1)
發現最終在螢幕上顯示了乙個8位16進製制數,高四位表示其段位址,低四位表示其偏移位址。
已解決問題:
如果把全域性變數a變成每個函式內部的區域性變數,又會有什麼不同?
圖1 a為全域性變數 圖2 a為區域性變數
從實驗結果中,我們可以看到,是否定義全域性變數對第乙個函式名的位址沒有影響,但是如果換成了區域性變數,則對於後兩個函式名的偏移位址產生影響。
未解決問題:
暫無。感想:
在彙編中,我麼關注資料的位址和資料的大小,在c語言中我們同樣關注這個問題,只不過,我們換成了關注資料的資料型別,僅此而已,而其本質並無多大區別。
函式指標與函式名
迷惑很久的問題了,今天正好又遇到這個問題,就抽了個時間研究總結了一下把它記錄下來。和同學討論乙個typedef的問題,實驗過程中偶然發現vs2005的行為 int fun wrong syntax constraint error f g wrong declares that g returns ...
函式指標與函式名
首先函式指標的定義,如果指向無參函式,定義的時候後面一定要加 否則編輯器無法分辨這是指向函式的指標 void f 指向void 的指標 void f 指向void void 函式的指標 int f 指向int void 函式的指標 寫這個主要是因為今天突然想到,函式名,函式指標,到底都是啥?先看 i...
函式名與函式指標
對函式名和函式指標存在一些疑惑,如下 通過乙個簡單的測試程式,並對其進行反彙編,對其分析,對上述問題有了清晰的認識.先貼上測試 和反彙編 以供分析.typedef void pfunc void void func int main void main 函式的反彙編 段 pfunc p p func...