指標和引用是相似的概念,但並不相同。它們都指向乙個物件,但是指標允許這個指向隨時變化,並且它允許你指向乙個空物件。引用不一樣,引用在初始時就必須指向乙個物件,並且這個指向永遠不能變化,也就是說永遠只能指向這個物件,不能改變。可以這麼理解,指標是乙個變數的指向,引用是乙個常量的指向。
指標和引用在操作上也有區別,指標使用操作符*和
->
,引用使用操作符&和
.。比如,在定義時他們使用不同的操作符:
定義指標:
int *number ; //
可以不初始賦值
定義引用:
string s =
「hangcool」;
string& ps = s ; //
必須初始賦值,這樣
ps 就指向了s 。
在指向乙個變數的成員時使用不同的操作符:
指標指向:
x->y ; //
指向x
指標的成員y ;
引用指向:
x.y ; //
指向x
引用的成員y ;
當然我們也可以這樣寫:
(*x).y
等價於x->y 。
在指標的概念裡必須清楚,
x 代表指向某個位址的位址值,
*x 代表指向某個位址的變數值。
另外,除了在定義指標和引用的地方用到* 和
& ,它們還有乙個重要的用途:
在變數前使用* 和
& 它們有不同的含義: *
:稱作引用操作符
。它表示要取的是表示式所表示的位址指向的內容。它可以被翻譯為「…
指向的數值」
("value pointed by") 。
比如,* mypointer
可以被讀作「
mypointer
指向的數值」。 &
:稱作位址或反引用操作符
。它被用作乙個變數字首,可以被翻譯為「…
的位址」
("address of") ,
比如,&variable1
可以被讀作
variable1
的位址。
指標引用和引用指標的區別
c 在傳參的過程中,指標 和指標引用 是有區別的。雖然,我們往往可以通過傳指標然後通過間址訪問來修改指標所指向物件的值,同樣,通過引用也可以直接修改物件的值。但是,當傳指標的時候有乙個問題,就是,我們雖然可以通過指標來修改指標所指向物件的值,但是我們沒有不能直接修改指標的內容 也就是指標變數存放的位...
傳指標和傳指標引用的區別 指標和引用的區別(本質)
指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值...
傳指標和傳指標引用的區別 指標和引用的區別(本質)
指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值...