2010-04-27 73 views
0

我正在嘗試編寫一個函數,它接受一個指針參數,修改指針指向的內容,然後返回指針的目的地作爲參考。 我收到以下錯誤:cannot convert int*** to int* in return指針引用類型

代碼:

#include <iostream> 
using namespace std; 

int* increment(int** i) { 
    i++; 
    return &i; 
} 

int main() { 
    int a=24; 
    int *p=&a; 
    int *p2; 
    p2=increment(&p); 
    cout<<p2; 
} 

感謝您的幫助!

+0

請更清晰地格式化您的代碼。我們閱讀並幫助你更容易;它可以幫助您更容易地找到錯誤(錯誤消息的行號將幫助您更多)。 – Smashery 2010-04-27 01:09:47

回答

2

如果你真的意味着「返回指針作爲參考的目的」,那麼我認爲你後返回類型爲int&而非int*

這可能是關於C++的令人困惑的事情之一,因爲&*具有不同的含義,具體取決於您使用它們的位置。 &是「引用類型」,如果您正在討論變量定義或返回類型;但它意味着「地址」,如果它在定義之後被使用的變量之前。

我可能完全錯了,但在我看來,你已經把這兩種含義混淆了;既然你想返回一個參考,你已經寫了「return &i」,因爲&用於參考。但是,在這種情況下,它將返回i地址。而且,由於i是一個指針的指針爲int,在這行代碼:

int* increment(int** i) { i++; return &i;} 

你是一個指針的地址返回一個指向int。這就是爲什麼你收到你的錯誤信息cannot convert int***' to int*

讓我們一行一行地看看你的代碼。您正在執行一個程序,該程序需要指針並返回一個引用。因此,這將是:

int& increment(int* i) 

(除非你想有一個指針的指針),我們不需要你在你的代碼有雙指針。然後,你希望它是什麼修改的指針指向:

(*i)++; 

然後返回指針的目的地作爲參考:

return *i; 

在這裏,我們提領i。請記住,使用引用可以讓你像普通變量一樣對待它們,併爲你處理指針。所以C++會發現你希望它成爲一個參考。

然後,用你的代碼,你可以做很多你有什麼,但使用較少的指針:

int a=24; 
int *p=&a; 
int *p2; 
p2 = increment(p); 

我沒有測試過任何這一點,所以任何人都可以隨意編輯我的答案並修復它,如果我有什麼問題。

1
int* increment(int** i) { (**i)++; return *i;} 

cout << *p2; 
+0

'&i'返回'int ***',而函數將返回類型定義爲'int *'。你需要解除引用'我'。 – 2010-04-27 01:01:50

+0

謝謝,但我需要返回函數中的參考 – Jony 2010-04-27 01:02:37

+0

@Code:引用什麼? '* i'也是對'** i'的引用。嘗試使用建議的更改運行代碼並查看是否您想要的。 – 2010-04-27 01:04:50