• <em id="6vhwh"><rt id="6vhwh"></rt></em>

    <style id="6vhwh"></style>

    <style id="6vhwh"></style>
    1. <style id="6vhwh"></style>
        <sub id="6vhwh"><p id="6vhwh"></p></sub>
        <p id="6vhwh"></p>
          1. 国产亚洲欧洲av综合一区二区三区 ,色爱综合另类图片av,亚洲av免费成人在线,久久热在线视频精品视频,成在人线av无码免费,国产精品一区二区久久毛片,亚洲精品成人片在线观看精品字幕 ,久久亚洲精品成人av秋霞

            指針的引用

            更新時間:2023-03-01 19:44:41 閱讀: 評論:0

            C語言指針/引用/取值

            指針是一個存儲計算機內存地址的變量。從指針指向的內存讀取數據稱作指針的取值。指針可以指向某些具體類型的變量地址,例如int、long和double。指針也可以是void類型、NULL指針和未初始化指針。

            根據出現的位置不同,操作符  *  既可以用來聲明一個指針變量,也可以用作指針的取值。當用在聲明一個變量時,*表示這里聲明了一個指針。其它情況用到*表示指針的取值。

            &是地址操作符,用來引用一個內存地址。通過在變量名字前使用&操作符,我們可以得到該變量的內存地址。

            // 聲明一個int指針

            int*ptr;

            // 聲明一個int值

            int  val = 1;

            // 為指針分配一個int值的引用

            ptr = &val;

            // 對指針進行取值,打印存儲在指針地址中的內容

            int deref = *ptr;

            printf("%d\n", deref);

            第2行,我們通過*操作符聲明了一個int指針。接著我們聲明了一個int變量并賦值為1。然后我們用int變量的地址初始化我們的int指針。接下來對int指針取值,用變量的內存地址初始化int指針。最終,我們打印輸出變量值,內容為1。

            第6行的&val是一個引用。在val變量聲明并初始化內存之后,通過在變量名之前使用地址操作符&我們可以直接引用變量的內存地址。

            第8行,我們再一次使用*操作符來對該指針取值,可直接獲得指針指向的內存地址中的數據。由于指針聲明的類型是int,所以取到的值是指針指向的內存地址存儲的int值。

            說穿了,指針就是地址吧,這里可以把指針、引用和值的關系類比為信封、郵箱地址和房子。一個指針就好像是一個信封,我們可以在上面填寫郵寄地址。一個引用(地址)就像是一個郵件地址,它是實際的地址。取值就像是地址對應的房子。我們可以把信封上的地址擦掉,寫上另外一個我們想要的地址,但這個行為對房子沒有任何影響。

            指針和指針的指針還有指針的引用的作用分別是什么啊

            指針 就是一個地址,不過是帶類型的。 比如int *p, p里面存的是一個地址,*p是一個int型。
            你可以認為指針就是一個門牌號,可以找到對應的東西。

            指針的指針,其實還是指針。只不過指向內存區域里面存的類型有些特殊,是另外一個指針。
            想簡單一些,和其他的沒什么區別。

            指針的引用,就是一個指針變量的別名。 和單純的指針,沒任何區別。

            指針的與“引用”的區別

            C++編程中指針與引用的區別
            一、指針和引用的區別
            (1)引用總是指向一個對象,沒有所謂的 null reference .所有當有可能指向一個對象也有可能不指向對象則必須使用 指針.
            由于C++ 要求 reference 總是指向一個對象所以 reference要求有初值.
            String & rs = string1;
            由于沒有所謂的 null reference 所以在使用前不需要進行測試其是否有值,而使用指針則需要測試其的有效性.
            (2)指針可以被重新賦值而reference則總是指向最初或地的對象.
            (3)必須使用reference的場合. Operator[] 操作符 由于該操作符很特別地必須返回 [能夠被當做assignment 賦值對象] 的東西,所以需要給他返回一個 reference.
            (4)其實引用在函數的參數中使用很經常.
            void Get***(const int& a) //這樣使用了引用又可以保證不修改被引用的值
            {
            }
            ★ 相同點:
            1. 都是地址的概念;
            指針指向一塊內存,它的內容是所指內存的地址;引用是某塊內存的別名。
            ★ 區別:
            1. 指針是一個實體,而引用僅是個別名;
            2. 引用使用時無需解引用(*),指針需要解引用;
            3. 引用只能在定義時被初始化一次,之后不可變;指針可變;
            引用“從一而終”
            4. 引用沒有 const,指針有 const,const 的指針不可變;
            5. 引用不能為空,指針可以為空;
            6. “sizeof 引用”得到的是所指向的變量(對象)的大小,而“sizeof 指針”得到的是指針本身(所指向的變量或對象的地址)的大小;
            typeid(T) == typeid(T&) 恒為真,sizeof(T) == sizeof(T&) 恒為真,
            但是當引用作為成員時,其占用空間與指針相同(沒找到標準的規定)。
            7. 指針和引用的自增(++)運算意義不一樣;
            二、C++中指針傳遞與引用傳遞(進一步整理)
            從概念上講。指針從本質上講就是存放變量地址的一個變量,在邏輯上是獨立的,它可以被改變,包括其所指向的地址的改變和其指向的地址中所存放的數據的改變。
            而引用是一個別名,它在邏輯上不是獨立的,它的存在具有依附性,所以引用必須在一開始就被初始化,而且其引用的對象在其整個生命周期中是不能被改變的(自始至終只能依附于同一個變量)。
            在C++中,指針和引用經常用于函數的參數傳遞,然而,指針傳遞參數和引用傳遞參數是有本質上的不同的:
            指針傳遞參數本質上是值傳遞的方式,它所傳遞的是一個地址值。值傳遞過程中,被調函數的形式參數作為被調函數的局部變量處理,即在棧中開辟了內存空間以存放由主調函數放進來的實參的值,從而成為了實參的一個副本。值傳遞的特點是被調函數對形式參數的任何操作都是作為局部變量進行,不會影響主調函數的實參變量的值。(這里是在說實參指針本身的地址值不會變)
            而在引用傳遞過程中,被調函數的形式參數雖然也作為局部變量在棧中開辟了內存空間,但是這時存放的是由主調函數放進來的實參變量的地址。被調函數對形參的任何操作都被處理成間接尋址,即通過棧中存放的地址訪問主調函數中的實參變量。正因為如此,被調函數對形參做的任何操作都影響了主調函數中的實參變量。
            引用傳遞和指針傳遞是不同的,雖然它們都是在被調函數棧空間上的一個局部變量,但是任何對于引用參數的處理都會通過一個間接尋址的方式操作到主調函數中的相關變量。而對于指針傳遞的參數,如果改變被調函數中的指針地址,它將影響不到主調函數的相關變量。如果想通過指針參數傳遞來改變主調函數中的相關變量,那就得使用指向指針的指針,或者指針引用。
            為了進一步加深大家對指針和引用的區別,下面我從編譯的角度來闡述它們之間的區別:
            程序在編譯時分別將指針和引用添加到符號表上,符號表上記錄的是變量名及變量所對應地址。指針變量在符號表上對應的地址值為指針變量的地址值,而引用在符號表上對應的地址值為引用對象的地址值。符號表生成后就不會再改,因此指針可以改變其指向的對象(指針變量中的值可以改),而引用對象則不能修改。
            最后,總結一下指針和引用的相同點和不同點:
            ★相同點:
            ●都是地址的概念;
            指針指向一塊內存,它的內容是所指內存的地址;而引用則是某塊內存的別名。
            ★不同點:
            ●指針是一個實體,而引用僅是個別名;
            ●引用只能在定義時被初始化一次,之后不可變;指針可變;引用“從一而終”,指針可以“見異思遷”;
            ●引用沒有const,指針有const,const的指針不可變;(具體指沒有int& const a這種形式,而const int& a是有 的, 前者指引用本身即別名不可以改變,這是當然的,所以不需要這種形式,后者指引用所指的值不可以改變)
            ●引用不能為空,指針可以為空;
            ●“sizeof 引用”得到的是所指向的變量(對象)的大小,而“sizeof 指針”得到的是指針本身的大小;
            ●指針和引用的自增(++)運算意義不一樣;
            ●引用是類型安全的,而指針不是(引用比指針多了類型檢查)


            指針和引用的區別

            1.
            指針是一個實體,而引用僅是個別名;
            2.
            引用使用時無需解引用(*),指針需要解引用;
            3.
            引用只能在定義時被初始化一次,之后不可變;指針可變;
            引用“從一而終”
            ^_^
            4.
            引用沒有
            const,指針有
            const,const
            的指針不可變;
            5.
            引用不能為空,指針可以為空;
            6.
            “sizeof
            引用”得到的是所指向的變量(對象)的大小,而“sizeof
            指針”得到的是指針本身(所指向的變量或對象的地址)的大小;
            typeid(T)
            ==
            typeid(T&)
            恒為真,sizeof(T)
            ==
            sizeof(T&)
            恒為真,但是當引用作為類成員名稱時,其占用空間與指針相同4個字節(沒找到標準的規定)。
            7.
            指針和引用的自增(++)運算意義不一樣;

            指向指針的指針和指針的引用做函數參數怎樣理解,求大神解釋。

            你的問題本質就是指針和引用的區別,請參考以下鏈接
            http://zhidao.baidu.com/question/1638411952021780300.html?oldq=1

            只不過,你的問題中,被指針指向和引用的是另一個指針變量。假設指針的指針為pp,指針的引用為r,而被指向的指針為p,則:

            int a;//目標整數變量
            int *p=&a;//一級指針
            int **pp=&p;//二級指針
            int &R=&p;//指針的引用

            他們的關系用邏輯符號表示為:
            pp->p->a(PP的值為p的地址,p的值為a的地址,即pp指向p,p指向a,PP本身也需要占用內存空間,所以PP也有自己的地址)
            R=p->a(R引用p的地址,p的值為a的地址,即R是p的別名,p指向a,其中R的值就是p的地址,R本身不需要占用內存空間,也就沒有自己的地址)

            因此,引用和指針變量的區別是,引用本身不占用內存空間,指針變量需要占用內存空間(凡是變量都需要占用內存空間,凡是占用內存空間必然有地址)。
            如還不明白可以追問。

            C++ 指針的引用問題

            引用的地址就是被引用變量的地址。你把!=的情況直接輸出地址看看,我這里全等,應該是編譯器不同吧。

            至于this,是個特殊的指針,一般我們自己定義的指針會分配一個內存空間,比如32位的地址會分配4字節的指針變量空間。然后指針賦值時,將某變量或對象的地址存入。但是this是編譯器確定的常量地址,this指向對象地址,它本身是對象內部的相對偏移量,當然沒有地址,所以無法引用。

            一般基類指針和派生類指針不一樣,而當一個派生類創繼承的是虛基類,此時是一樣的。

            下面看看this到底是個什么東西,調試時查看反匯編,見附圖:

            函數返回this時,找到this指向的地址,取出后返回。

            進入函數時,將CPU的基地址寄存器(ebp)入棧,也就是對象地址,初始化參數后。

            第一行指令pop,彈棧到寄存器ecx

            第二行是將ecx寄存器存入ebp-8的地址中,也就是在對象地址上面8個字節開始存放對象地址。

            第三行根據this指針取得對象地址,存入寄存器eax。

            注意這行的指令代碼(8B 45 F8)最后一個字節,F8的十進制是-8,顯然就是偏移量,是基地址的偏移量,所以this指向的就是ebp-8.而ebp-8的地址中正是第二行存入的基地址(對象地址)。

            后面就是返回eax,觀察監視窗口,this和ecx寄存器的值是一樣的,該值就是對象地址,調試器已做了偏移量計算。


            本文發布于:2023-02-28 20:21:00,感謝您對本站的認可!

            本文鏈接:http://m.newhan.cn/zhishi/a/167767108181808.html

            版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。

            本文word下載地址:指針的引用.doc

            本文 PDF 下載地址:指針的引用.pdf

            標簽:指針
            相關文章
            留言與評論(共有 0 條評論)
               
            驗證碼:
            Copyright ?2019-2022 Comsenz Inc.Powered by ? 實用文體寫作網旗下知識大全大全欄目是一個全百科類寶庫! 優秀范文|法律文書|專利查詢|
            主站蜘蛛池模板: 少妇被粗大的猛烈进出69影院一| 国产精品第一页中文字幕| 亚洲成A人片在线观看无码不卡| 欧洲美女粗暴牲交免费观看| 亚洲中文字幕无码爆乳| 蜜臀av午夜精品福利| 亚洲精品天天影视综合网| 在线精品自拍亚洲第一区| 日韩精品无码一区二区三区| 人妻人人澡人人添人人爽| 国产精品色一区二区三区| 99精品国产中文字幕| 91久久性奴调教国产免费| 伊在人亞洲香蕉精品區| 国产AV一区二区精品凹凸| 一区二区三区自拍偷拍视频| 91精品国产自产在线蜜臀| 国产免费福利网站| 国产精品无圣光一区二区| 亚洲色一区二区三区四区| 无码人妻精品一区二区三区下载| 亚洲欧美日韩综合一区在线| 国产精品无码AV中文| 久久精品国产亚洲αv忘忧草| 精品少妇av蜜臀av| 大地资源高清在线观看免费新浪| 亚洲天堂视频网| 久青草视频在线观看免费| 亚洲精品一区二区制服| 亚洲国产初高中生女av | 中文字幕亚洲一区一区| 曰韩高清砖码一二区视频| 久99久热只有精品国产99| 医院人妻闷声隔着帘子被中出| 国产精品毛片av999999| 2021亚洲国产精品无码| 免费看国产精品3a黄的视频| 久久久久亚洲av成人网址| 久久男人av资源站| 人人做人人妻人人精| 国产在线午夜不卡精品影院|