<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 303  文章 - 883  trackbacks - 0
    <2008年2月>
    272829303112
    3456789
    10111213141516
    17181920212223
    2425262728291
    2345678

    歡迎光臨! 
    閑聊 QQ:1074961813

    隨筆分類(357)

    我管理的群

    公共blog

    • n維空間
    • Email : java3d@126.com 群 : 12999758

    參與管理的論壇

    好友的blog

    我的其他blog

    朋友的網(wǎng)站

    搜索

    •  

    最新評(píng)論

             對(duì)于初學(xué)C或C的初級(jí)程序員很多人在用指針卻不清楚指針究竟是怎么回事?。〔簧俚臅鴮?duì)于這個(gè)問(wèn)題通常也是含糊其詞,搞得學(xué)習(xí)的人很郁悶。很多的人甚至在寫C或C++代碼的時(shí)候,養(yǎng)成盡量少用指針的習(xí)慣??吹竭@種情況我覺(jué)得實(shí)在是~~~,于是決定寫下此文,在這里我將用簡(jiǎn)短的內(nèi)容簡(jiǎn)要的講下這個(gè)問(wèn)題,寫它的時(shí)候,我撇開內(nèi)存分配機(jī)制(頁(yè)、段),希望通過(guò)這篇文章可以幫助大家正確且清晰的認(rèn)識(shí)指針。

             且看下圖,這是我對(duì)某段內(nèi)存一個(gè)非常抽象的表達(dá),其中,左邊是地址 p , a , b 他們是一個(gè)內(nèi)存地址,也就是說(shuō)我可以假設(shè)說(shuō) p = 0x10000f8  a = 0x10220  b = 0x56998 (出于習(xí)慣,內(nèi)存地址我用16進(jìn)制表示)。左邊是內(nèi)容(值)P 、A 、B是p 、a 、b所在地址的值。




    在認(rèn)識(shí)指針之前,我們必須先認(rèn)識(shí),普通變量的賦值

    當(dāng)我們要取值 A 的時(shí)候,程序里會(huì)用到 a
    如 b = a 那么這個(gè)時(shí)候 B 就變成了A
    結(jié)果如下


    也就是說(shuō),在程序中我們用變量的地址(或說(shuō)他們的名字)a 來(lái)表值A(chǔ)

    那么指針一般怎么寫? 是不是*p ,那么這個(gè)地方的“*”究竟是怎么意思?我們有必要先弄清楚這個(gè)問(wèn)題;

    “&”和 “*”這對(duì)冤家 ~~~~
    “&”是取地址、“*”是取內(nèi)容。意味著在程序中
     &a  表示的是值A(chǔ)的地址,也就是前面提到的a = 0x10220
    而“*”并不是所有的變量都可以用到哦,在C里只有指針變量才有資格用它 (*p)
    原因是指針本身就與眾不同,如圖中的p 他的值為P ,而P本身就是一個(gè)內(nèi)存地址,但是p本身也是一個(gè)變量,那就意味著他同樣具有變量的特性,所以,如前面所說(shuō),我們要得到P,我們可以在程序里通過(guò)引用 p 來(lái)實(shí)現(xiàn)。int *p,*q; ... q = p; 和變量一樣char a1,a2;...a1=a2; ,只要大家的類型一樣,就可以這樣搞。

    接著,我們對(duì) p = &a ; 這個(gè)操作做下解釋。
    這個(gè)操作是把a(bǔ)的地址給p,也就是說(shuō)做完這個(gè)操作后P = 0x10220


    簡(jiǎn)單代碼(運(yùn)行環(huán)境vs2005)
    #include <iostream> 
    using namespace
     std;

    int main(void
    )
        
    int a = 2,b = 3
    ;
        
    int *p,*
    q;
        p 
    = &
    a;
        q 
    = &
    b;
        p 
    =
     q;
        cout
    <<*p<<
    endl;
        
    return 0
    ;
    }


    就寫怎么多了,因?yàn)楹芡砹说盟X(jué)去 886
    早上起床,我繼續(xù)寫
    接下來(lái)討論
    *p = NULL;
    這個(gè)問(wèn)題似乎比較復(fù)雜,其實(shí)不然,首先、前面已經(jīng)知道*p表示的是某個(gè)內(nèi)存量(如:a)為方面理解,這里我們使用面向?qū)ο蟮母拍?,而NULL表示“沒(méi)有”。在VC++2005中反編譯

        int *p = NULL; ==> mov         dword ptr [p],0

    默認(rèn)情況下,VC++2005編譯器會(huì)給NULL指針附一個(gè)0的初值,意思是:指針p指向內(nèi)存中一個(gè)不存在的對(duì)象或者另一種說(shuō)法指針不指向當(dāng)前內(nèi)存中任何對(duì)象。
    上面代碼中如果加入下面的語(yǔ)句
        *= NULL;
        cout
    <<*p<<endl;
        
    *= a;
        cout
    <<*p<<endl;

    運(yùn)行結(jié)果是 0 2
    2當(dāng)然容易理解,那么0呢?為什么是0?原因是當(dāng)指針不指向任何內(nèi)存單位的時(shí)候,這個(gè)時(shí)候vs2005編譯器會(huì)給他賦值0,也就是說(shuō)P會(huì)變成0。



    地震讓大伙知道:居安思危,才是生存之道。
    posted on 2008-02-18 18:03 小尋 閱讀(685) 評(píng)論(0)  編輯  收藏 所屬分類: c/c++/C#/pasic/vb/php/asp(.net)/win-cgi/xml...
    主站蜘蛛池模板: 伊人久久亚洲综合影院首页| 亚洲黄色片在线观看| 亚洲AV成人精品一区二区三区| 亚色九九九全国免费视频| 91亚洲国产成人精品下载| 99久久精品国产免费| 亚洲一区二区三区夜色| 18成禁人视频免费网站| 亚洲成在人线电影天堂色| 2021在线永久免费视频| 亚洲成a人不卡在线观看| 国产1024精品视频专区免费| 国产精品亚洲综合久久| 国产在线观看免费视频播放器 | 久久这里只精品国产免费10| 亚洲Av综合色区无码专区桃色| 免费无码又爽又刺激网站| 亚洲最新视频在线观看| 中国xxxxx高清免费看视频| 亚洲综合校园春色| 国产又大又黑又粗免费视频| 亚洲精品视频免费 | 久久国产精品亚洲综合| 18级成人毛片免费观看| 亚洲第一区二区快射影院| 国产大片线上免费看| 在线免费观看h片| 亚洲成aⅴ人在线观看| 精品国产免费观看久久久| 久久精品无码免费不卡| 亚洲视频一区网站| 国产精品无码一区二区三区免费| 一个人看的hd免费视频| 亚洲欧洲国产成人精品| 国产yw855.c免费视频| 亚洲视频免费在线观看| 日韩色日韩视频亚洲网站| 亚洲无码在线播放| 毛片大全免费观看| 特级做A爰片毛片免费看无码| 亚洲丝袜中文字幕|