2012-08-07 85 views
6

請問以下哪項是錯誤的?關於C++指針和引用,需要說明

這是我的理解,指針表示某種類型的東西的地址。

所以,int i = 18,它的指針是int *pI = &i;

以下兩個聲明是有效的

void foo (int &something) // Will accept an address of something 
void bar (int *something) // Will accept a pointer to something 

當我們將函數聲明爲

void bar (int *something) 

我們最好派一個指針一些東西。的確,foo(pI)的作品。

按照同樣的邏輯,看着

void foo (int &something) 

時,我們應該把它的東西指向一個int作爲參數的地址,這樣的話:

爲什麼foo(&i)錯了嗎?

回答

5

void foo (int &something) // Will accept an address of something

這是不正確的:int&參考,一個概念,類似於在某些方面的指針,但不是在所有相同。

引用與指針類似,可以通過引用更改值,就像通過指針可以更改值一樣。然而,沒有「空引用」這樣的東西,而NULL指針非常普遍。

當你調用一個函數,它的參考,您只需傳遞變量的引用到你正在服用的 - 沒有&要求操作:

void foo (something); // "something" must be a variable 
0

無效美孚(INT &東西)//願意接受的東西

沒有一個地址,但我能理解的混亂。該功能需要參考int。參考文獻在確定的程序中保證是非空的。它在概念上與指針類似,但在語義上不同。

要調用該函數,您不需要做任何特殊的事情。

int i = 10; 
foo(i); // passed to foo by reference 
0

因爲在C++中&如你在這裏使用這意味着在一個函數原型的上下文中,「引用類型」。你的函數:

void foo (int &something) 

實際上是指定一個整數引用類型應傳遞,所以你會簡單地調用這個函數是這樣的:

foo(i); 

注意,在這種情況下,你仍然傳遞地址i進入函數,但是您將它作爲引用類型而不是原始指針。

0

還有兩個&不同的含義。

首先是從現有變量創建一個指針。

二是做出參考。

即使他們都使用相同的字符,他們是兩個完全不同的東西。