如果你真的意味着「返回指針作爲參考的目的」,那麼我認爲你後返回類型爲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);
我沒有測試過任何這一點,所以任何人都可以隨意編輯我的答案並修復它,如果我有什麼問題。
請更清晰地格式化您的代碼。我們閱讀並幫助你更容易;它可以幫助您更容易地找到錯誤(錯誤消息的行號將幫助您更多)。 – Smashery 2010-04-27 01:09:47