![江佳-第二次研討會報告v20_第1頁](http://file4.renrendoc.com/view/788f59a354d5ce53472a516b6b8e136c/788f59a354d5ce53472a516b6b8e136c1.gif)
![江佳-第二次研討會報告v20_第2頁](http://file4.renrendoc.com/view/788f59a354d5ce53472a516b6b8e136c/788f59a354d5ce53472a516b6b8e136c2.gif)
![江佳-第二次研討會報告v20_第3頁](http://file4.renrendoc.com/view/788f59a354d5ce53472a516b6b8e136c/788f59a354d5ce53472a516b6b8e136c3.gif)
![江佳-第二次研討會報告v20_第4頁](http://file4.renrendoc.com/view/788f59a354d5ce53472a516b6b8e136c/788f59a354d5ce53472a516b6b8e136c4.gif)
![江佳-第二次研討會報告v20_第5頁](http://file4.renrendoc.com/view/788f59a354d5ce53472a516b6b8e136c/788f59a354d5ce53472a516b6b8e136c5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、 第二次研討會報告對c0s.obj進行修改,使得程序的入口函數(shù)不是mian函數(shù),而是hnlg函數(shù)。找到main如下將main修改成hnlg編寫如下程序:main() h(); printf(%xn,h);用tcc對此程序進行編譯、連接,注意會顯示什么提示信息?這些信息說明了什么? 提示信息說明了W1.c函數(shù)中調(diào)用的h函數(shù)沒有被定義。此程序的運行結(jié)果是什么?為什么?注意,要用debug加載,分析匯編指令。 用DEBUG加載如下:因為在調(diào)用h()函數(shù)時,有一次輸出,當調(diào)用h()函數(shù)后,返回到h()函數(shù)的下一條指令時,又有一次輸出函數(shù)。所以有兩次輸出。編寫如下程序:int n=0;main() fo
2、r(n=11;n15;n+); printf(%dn,n); n=11; while(n15)n+; printf(%dn,n); n=11; do n+; while(n=15時然后再將結(jié)果輸出。第二個與第一個一樣,也是先與15比較,滿足條件則加1操作,直到條件不滿足將n輸出。第三個循環(huán)實現(xiàn)的匯編代碼如下:這個循環(huán)的實現(xiàn)與前面的區(qū)別主要是先進行加操作,然后再與15作比較。深入研討的問題編寫如下程序:(通過此程序及相關(guān)問題的研究,了解C語言中字符串存儲機制。)char str12=hello world;int n=0 x2011;main() for(n=0;strn;n+)printf(%
3、c,strn); 先分析程序的執(zhí)行結(jié)果是什么?然后,再運行程序,驗證你的分析是否正確。分析的結(jié)果是:輸出來的就是字符串hello world循環(huán)是何時終止的?循環(huán)語句執(zhí)行了多少次循環(huán)?當strn=0時,也就是結(jié)尾符的ASKII碼時。在我的分析看來循環(huán)執(zhí)行了11次。用debug加載分析: 跳轉(zhuǎn)到0209處的代碼如下:取0194處的字符串中的字符到遇到結(jié)尾符也就是ASKII碼為00時就結(jié)束循環(huán)。而結(jié)尾符ASKII碼只占一個字節(jié),它占了全局變量n的高字節(jié),而整個循環(huán)過程中n的值12,它不會修改它的高字節(jié)的內(nèi)容,也就是放結(jié)尾符的內(nèi)存單元的值,除非循環(huán) 255,結(jié)果就不會是我們的理想結(jié)果了,而可能要輸出
4、比實際多的字符。字符串和全部變量n分別存儲在哪兒?各占多少字節(jié)大小的空間?字符串的存儲空間是放在以0194開始處的一片內(nèi)存中。而緊跟著字符串后的00的偏移地址為01A0,而根據(jù)可知全局變量n就放在字符串的后面。字符串占了11個字節(jié),而全局變量n占了2個字節(jié)。將程序中的第一條語句修改為:char str12=hello world!;先分析程序的執(zhí)行結(jié)果是什么?然后,再運行程序,驗證你的分析與實際結(jié)果是否一直?如果不一致,說明原因。我覺得會輸出hello world!驗證結(jié)果為:為什么多了一個字符亂碼的輸出?這是怎么回事?debug繼續(xù)加載如下:最后多出來的一個字符的Askii碼是全局變量n的低
5、字節(jié)中的值,因為當全局變量n為12時,此時0194+12=01a0,此時取的值剛好為n的低字節(jié)的值,所以才會多輸出一個。N再加1時,此時便是n的高字節(jié)00,遇到0循環(huán)結(jié)束。編寫如下程序:(通過此程序及相關(guān)問題的研究,加深對指針變量的理解和認識。)int value_p;int addr_p;char value_pp;int addr_pp;main() char *p; p=(int *)0 x100; *p=0 x111; value_p=(int)p; addr_p=(int)&p; value_pp=*p; addr_pp=(int)(&(*p); printf(%x,%pn,valu
6、e_p,p); printf(%x,%pn,addr_p,&p); printf(%x,%xn,value_pp,*p); printf(%x,%pn,addr_pp,&(*p);用tcc對此程序進行編譯,會有警告,怎樣消除此警告?從匯編層分析此警告的合理性。將p=(int *)0 x100改為p=(char *)0 x100,便可消除警告出現(xiàn)該警告的原因是將一個指向兩個字節(jié)(也就是指向整型的地址)賦值給一個指向一個字節(jié)的字符的地址,肯定會造成類型不匹配,最后我的猜想是指針p指向了0 x100處的整數(shù)的低字節(jié)。驗證猜想:經(jīng)驗證確實是將0 x111的低字節(jié)11放到0 x100所指的一個內(nèi)存單元中
7、。用文字說明此程序的邏輯功能。首先該程序定義一個指向字符的一個指針,然后再將指向整型的一個指針賦值給p,如圖給該整型指針分配了兩個內(nèi)存單元,然后p的值就為0100,因為p是指向字符的指針,所以此時p=0 x100的意思是指向0 x100處的一個字節(jié)單元的值。再將該內(nèi)存單元中賦值0 x111.因為p指向的是一個字節(jié)單元。而賦的值為一個字。所以截取該字的低字節(jié)11放到p所指的地方去。接下來便是將指針p強制轉(zhuǎn)化成整型然后賦值給全局變量整型value_p中,如上對應的匯編指令可知。此處為全局變量value_p分配的內(nèi)存單元為【0442】處的一個字單元。接下來又取指針p的地址(也就是系統(tǒng)為指針變量p分配
8、的內(nèi)存單元的首地址)也就是當前0100所在內(nèi)存單元的偏移地址然后直接將它賦值給addr_p,系統(tǒng)為addr_p分配的內(nèi)存單元為【043e】處的一個字單元。然后又取p指針指向的內(nèi)存單元的內(nèi)容賦值給value_pp(系統(tǒng)分配的內(nèi)存單元為0444處的一個字節(jié)單元),也就是將0100處的11賦值給value_pp.然后又將指針p所指的內(nèi)存單元的偏移地址,其實就是p本身的值0100賦值給addr_pp(系統(tǒng)分配的內(nèi)存單元便是【0440】處的一個字單元)。最后程序運行的結(jié)果為:用debug對此程序進行分析,然后,結(jié)合此程序說明:指針變量在底層是如何實現(xiàn)的。指針變量在底層是通過存放另外一個變量的偏移地址而實
9、現(xiàn)的。它存放的是其他變量的偏移地址。用debug對此程序進行分析,然后,結(jié)合此程序說明:運算符*,&的運算對象和運算結(jié)果分別是什么?*是取指針變量中存放的偏移地址所指向的內(nèi)存單元中的內(nèi)容。而&是取系統(tǒng)為指針p分配的內(nèi)存的偏移地址。根據(jù)上面的研究結(jié)果和第5章的研究經(jīng)歷,完成以下工作:先分析說明運算符的運算對象和運算結(jié)果分別是什么,再設計程序驗證你的結(jié)論。運算符【】的對象必須是指針類型,運算結(jié)果是某個內(nèi)存單元的地址。下面是自己猜想中是不是只能是整型而做的研究:驗證的程序如下:main() char a; int b10; for(a=1;a=9;a+) ba=1;通過單步調(diào)試,發(fā)現(xiàn)a的變化并沒有從
10、31變到39,而是從62變到78.,并且,【】運算是將a的值強制轉(zhuǎn)化成整型再加上b的偏移地址。所以雖然此程序中a的值一開始是字符型的。但是系統(tǒng)會將它轉(zhuǎn)化成整形。由此可驗證的運算對象本質(zhì)上是針對整型,運算結(jié)果便是相對偏移地址。此程序在看匯編代碼時覺得很奇怪,系統(tǒng)為該程序中分配了16個棧單元,在分析時,只用到了【bp-15】與【bp-14】而其余的似乎沒用到,為數(shù)組分配的內(nèi)存單元也應該不止是16個,至少也要18個。不知道什么原因,有待探討。3、思考,研究:變量在底層的實際存儲次序與什么因素相關(guān)?與變量的定義次序相關(guān)?還是變量的使用次序相關(guān)?還是可以用以下程序及其的相關(guān)變換進行研究,程序如下:char *p;char *pa;char *pf;main() p=(char *)0 x1000; pa=(char *)0 x10
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年鐵嶺貨運上崗證考試題
- 2025年唐山c1貨運上崗證模擬考試
- 2024-2025年高中政治課時作業(yè)10新時代的勞動者含解析新人教版必修1
- 2024-2025學年高中生物課時分層作業(yè)12基因指導蛋白質(zhì)的合成含解析新人教版必修2
- 2024-2025版高中生物2.1.1-2孟德爾遺傳試驗的科學方法分離規(guī)律試驗練習含解析中圖版必修2
- 2024-2025學年高中化學課時提升作業(yè)十五鹽類的水解含解析新人教版選修4
- 2024-2025學年八年級物理全冊4.1光的反射練習含解析新版滬科版
- 2024-2025學年高中語文7李將軍列傳學案含解析蘇教版選修史記蚜
- 2024-2025學年高中生物第2章細胞的化學組成第2節(jié)組成細胞的無機物練習含解析北師大版必修1
- 我想你的檢討書
- 2024-2030年全球及中國低密度聚乙烯(LDPE)行業(yè)需求動態(tài)及未來發(fā)展趨勢預測報告
- 傷殘撫恤管理辦法實施細則
- 醫(yī)院物業(yè)管理制度
- 初中數(shù)學思維訓練雙十字相乘法因式分解練習100道及答案
- (正式版)QC∕T 625-2024 汽車用涂鍍層和化學處理層
- 提升模組良率-六西格瑪
- DL-T+5196-2016火力發(fā)電廠石灰石-石膏濕法煙氣脫硫系統(tǒng)設計規(guī)程
- 2024年江蘇省無錫市中考英語試卷附答案
- 2024-2030年中國產(chǎn)教融合行業(yè)市場運營態(tài)勢及發(fā)展前景研判報告
- 2024年微生物檢測試劑行業(yè)商業(yè)計劃書
- 河南開封介紹課件
評論
0/150
提交評論