• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            hellohuan

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              2 Posts :: 3 Stories :: 0 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(1)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            程序如下:
            #include <iostream>
            using namespace std;


            void fuck(int *&j)
            {
            int l = 20;
            int *k = &l;
            j = k;
            k = 0;
            }

            void any_function_use_local_variables()
            {
            int a, b, c;
            a=b=c=100;
            }

            int main()
            {

            int i = 10;
            int *j = &i;

            fuck(j);
            /////-------------------------
            cout < <*j < <endl;   
            ////-------------------------
            cout < <*j < <endl;

            any_function_use_local_variables();
            ////-------------------------
            cout < <*j < <endl;
            //
            cout < <*j < <endl;

            return 0;
            };


            打印結(jié)果,四次cout < <*j < <endl;結(jié)果都不同,依次是:
            20
            274148040
            -858993460
            274148040
            這個我開始就不太明白了,明明fuck了局部變量為什么還能得到20的值,j應(yīng)當(dāng)指向一塊不確定的內(nèi)存區(qū)域,卻有了幾次不一樣的結(jié)果。
            于是在論壇里面貼了出來,自己也查了很多資料試驗(yàn)了很多程序。
            原因我的理解基本是這樣:
            第一個輸出時因?yàn)槭莿倓偡祷?,雖然局部變量銷毀了.
            (我的理解銷毀:就是我放棄了這個地方了.原來我在那放了一個蘋果,在沒人用這塊地方時蘋果還在)
            所以第一個輸出還是20。之后這塊內(nèi)存應(yīng)該被用過了,所以變成了其它的值。
            下面是一位牛人的回復(fù),挺有道理!
            ///////////////////
            第一次輸出:在void fuck(int *&j) 函數(shù)中,聲明的局部變量K,假設(shè)地址為oxff71,在函數(shù)中,這個地址賦值給了j;
            然后,函數(shù)中的局部變量K所指的內(nèi)存的值為20;然后,fuck函數(shù)結(jié)束,局部變量的內(nèi)存被釋放,單這個釋放只是說明了這塊內(nèi)存可以被重新使用,并不是把內(nèi)存里的數(shù)值歸0了,所以。在第一次輸出的時候,*j為20;

            第2次輸出:其實(shí)cout < <也是調(diào)用了一個函數(shù),這個函數(shù)怎么實(shí)現(xiàn)我并不知道,但是有理由相信,在這個函數(shù)中是要使用一些局部變量的,那么當(dāng)?shù)谝淮屋敵隽?j以后,這個函數(shù)或許沒有結(jié)束,它里面的局部變量使用了剛剛fuck釋放的那塊內(nèi)存,然而又有局部變量使用了oxff71這個地址,但是變量J所指的地址也正好是這樣,所以,輸出了另一組數(shù)字。

            第3次輸出:在調(diào)用了any_function_use_local_variables()這個函數(shù)后,其實(shí)我們可以把a(bǔ)ny_function_use_local_variables 這個函數(shù)簡化下, 簡化成下面這樣
            void any_function_use_local_variables()
            {
            int a=10;
            int b =100;
            }
            通過代碼跟蹤調(diào)試可以知道,any_function_use_local_variables函數(shù)還是使用了fuck釋放的內(nèi)存,因?yàn)槲覀兛梢郧宄目吹?b的地址是oxff71,所以第3次輸出的就是100了。

            其實(shí)我們可以在3個cout < <*j < <endl以后在加一個 cout < <*j < <endl,可以看到第4個輸出和第2個輸出是一樣的,從而就證明了我對第2次輸出的猜想。


            posted on 2008-07-29 21:08 炮灰九段 閱讀(72) 評論(0)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            色诱久久av| 99久久人人爽亚洲精品美女| 色婷婷噜噜久久国产精品12p | 精品久久久久久无码人妻热| 久久精品一区二区国产| 久久久久国产视频电影| 国产精品久久久久久久久软件 | 尹人香蕉久久99天天拍| 免费精品久久天干天干| 久久精品成人免费网站| 久久99精品国产麻豆蜜芽| 亚洲精品97久久中文字幕无码| 日韩精品久久久久久免费| 国产精品九九久久免费视频 | 久久99精品久久久久久野外| 手机看片久久高清国产日韩| 午夜欧美精品久久久久久久| 久久99亚洲综合精品首页| 蜜臀av性久久久久蜜臀aⅴ| 久久婷婷五月综合成人D啪| 99re久久精品国产首页2020| 久久中文字幕人妻熟av女| 久久九九青青国产精品| 无码精品久久久天天影视| 伊人色综合久久天天网| 久久亚洲av无码精品浪潮| 99久久国产热无码精品免费久久久久| 国产免费久久精品99re丫y| 久久久艹| 久久性生大片免费观看性| 99久久精品国产综合一区 | 国产精品久久久久久久久久影院| 久久99精品久久久久久hb无码| 中文字幕精品无码久久久久久3D日动漫 | 久久w5ww成w人免费| 99久久99久久精品国产片果冻 | 久久99精品国产麻豆宅宅 | 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 国内精品久久久久久久久电影网| 欧美麻豆久久久久久中文| 久久亚洲精品无码观看不卡|