<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

    朋友的網站

    搜索

    •  

    最新評論

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

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




    在認識指針之前,我們必須先認識,普通變量的賦值

    當我們要取值 A 的時候,程序里會用到 a
    如 b = a 那么這個時候 B 就變成了A
    結果如下


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

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

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

    接著,我們對 p = &a ; 這個操作做下解釋。
    這個操作是把a的地址給p,也就是說做完這個操作后P = 0x10220


    簡單代碼(運行環境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
    ;
    }


    就寫怎么多了,因為很晚了得睡覺去 886
    早上起床,我繼續寫
    接下來討論
    *p = NULL;
    這個問題似乎比較復雜,其實不然,首先、前面已經知道*p表示的是某個內存量(如:a)為方面理解,這里我們使用面向對象的概念,而NULL表示“沒有”。在VC++2005中反編譯

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

    默認情況下,VC++2005編譯器會給NULL指針附一個0的初值,意思是:指針p指向內存中一個不存在的對象或者另一種說法指針不指向當前內存中任何對象。
    上面代碼中如果加入下面的語句
        *= NULL;
        cout
    <<*p<<endl;
        
    *= a;
        cout
    <<*p<<endl;

    運行結果是 0 2
    2當然容易理解,那么0呢?為什么是0?原因是當指針不指向任何內存單位的時候,這個時候vs2005編譯器會給他賦值0,也就是說P會變成0。



    地震讓大伙知道:居安思危,才是生存之道。
    posted on 2008-02-18 18:03 小尋 閱讀(685) 評論(0)  編輯  收藏 所屬分類: c/c++/C#/pasic/vb/php/asp(.net)/win-cgi/xml...
    主站蜘蛛池模板: 亚洲视频中文字幕| 一级特黄a大片免费| 国产精品亚洲片在线va| 午夜亚洲国产理论片二级港台二级 | 亚洲精品mv在线观看| 亚洲AV无码一区二区三区人 | 亚洲国产精品成人一区| 亚洲日韩欧洲乱码AV夜夜摸| 亚洲精品一区二区三区四区乱码| 亚洲熟女乱色一区二区三区| 东方aⅴ免费观看久久av| 4虎永免费最新永久免费地址| 亚洲国产精品成人一区| 亚洲天堂电影在线观看| 日韩在线视频免费| 亚洲精品动漫免费二区| 亚洲午夜久久久久久久久电影网 | 亚洲电影日韩精品| 亚洲免费中文字幕| 久久国产精品成人免费| 国产免费一区二区三区VR| 亚洲精品美女久久久久| 91福利免费网站在线观看| 日韩吃奶摸下AA片免费观看| 亚洲精品无码专区久久久 | 91亚洲国产在人线播放午夜| 九九免费精品视频在这里| 免费看h片的网站| 亚洲AV成人片色在线观看| 四虎一区二区成人免费影院网址| 日韩精品免费电影| 亚洲综合国产成人丁香五月激情| 日本xxxx色视频在线观看免费| 亚洲理论电影在线观看| 最近免费中文字幕中文高清 | 亚洲色偷偷偷鲁综合| 国产成人高清精品免费观看| 亚洲AV无码乱码在线观看牲色| 亚洲AV无码成人精品区狼人影院 | 亚洲AV永久青草无码精品| 青青操在线免费观看|