程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++中指針和援用的差別剖析

C++中指針和援用的差別剖析

編輯:關於C++

C++中指針和援用的差別剖析。本站提示廣大學習愛好者:(C++中指針和援用的差別剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C++中指針和援用的差別剖析正文


從概念上講。指針從實質上講就是寄存變量地址的一個變量,在邏輯上是自力的,它可以被轉變,包含其所指向的地址的轉變和其指向的地址中所寄存的數據的轉變。

而援用是一個體名,它在邏輯上不是自力的,它的存在具有依靠性,所以援用必需在一開端就被初始化,並且其援用的對象在其全部性命周期中是不克不及被轉變的(自始至終只能依靠於統一個變量)。

在C++中,指針和援用常常用於函數的參數傳遞,但是,指針傳遞參數和援用傳遞參數是有實質上的分歧的:

指針傳遞參數實質上是值傳遞的方法,它所傳遞的是一個地址值。值傳遞進程中,被調函數的情勢參數作為被調函數的部分變量處置,即在棧中開拓了內存空間以寄存由主調函數放出去的實參的值,從而成了實參的一個正本。值傳遞的特色是被調函數對情勢參數的任何操作都是作為部分變量停止,不會影響主調函數的實參變量的值。

而在援用傳遞進程中,被調函數的情勢參數固然也作為部分變量在棧中開拓了內存空間,然則這時候寄存的是由主調函數放出去的實參變量的地址。被調函數對形參的任何操作都被處置成直接尋址,即經由過程棧中寄存的地址拜訪主調函數中的實參變量。正由於如斯,被調函數對形參做的任何操作都影響了主調函數中的實參變量。

援用傳遞和指針傳遞是分歧的,固然它們都是在被調函數棧空間上的一個部分變量,然則任何關於援用參數的處置都邑經由過程一個直接尋址的方法操作到主調函數中的相干變量。而關於指針傳遞的參數,假如轉變被調函數中的指針地址,它將影響不到主調函數的相干變量。假如想經由過程指針參數傳遞來轉變主調函數中的相干變量,那就得應用指向指針的指針,或許指針援用。

為了進一步加深年夜家對指針和援用的差別,上面我從編譯的角度來論述它們之間的差別:

法式在編譯時分離將指針和援用添加到符號表上,符號表上記載的是變量名及變量所對應地址。指針變量在符號表上對應的地址值為指針變量的地址值,而援用在符號表上對應的地址值為援用對象的地址值。符號表生成後就不會再改,是以指針可以轉變其指向的對象(指針變量中的值可以改),而援用對象則不克不及修正。

最初,總結一下指針和援用的雷同點和分歧點:

★雷同點:

●都是地址的概念;

指針指向一塊內存,它的內容是所指內存的地址;而援用則是某塊內存的別號。

★分歧點:

●指針是一個實體,而援用僅是個體名;

●援用只能在界說時被初始化一次,以後弗成變;指針可變;援用“從一而終”,指針可以“三心二意”;

●援用沒有const,指針有const,const的指針弗成變;

●援用不克不及為空,指針可認為空;

●“sizeof 援用”獲得的是所指向的變量(對象)的年夜小,而“sizeof 指針”獲得的是指針自己的年夜小;

●指針和援用的自增(++)運算意義紛歧樣;

●援用是類型平安的,而指針不是 (援用比指針多了類型檢討

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved