[英]Function that returns a pointer in C++
我已經開始學習指針,最后我提出了一個關於函數和指針的問題。 我創建了一個簡單的函數,它應該返回整數類型的地址/指針。 但是,使用“&”打印地址后,它與函數返回的地址不同。 我在這里缺少什么?
int* address_ofInt(int a) {
return &a;
}
int main() {
int foo = 124;
std::cout << &foo << std::endl;
std::cout << address_ofInt(foo) << std::endl;
return 0;
}
// It outputs
// 0x7ffee2434b08
// 0x7ffee2434acc
int* address_ofInt(int a) {
這在 C++ 中稱為“按值傳遞”。 這意味着無論調用者傳遞什么,作為函數的參數,都會有效地創建一個副本,這就是a
的含義。 這個函數可以修改這個a
,它不會影響原始參數,因為它只是一個副本。
這個a
是一個完全獨立的對象或變量,它的地址完全不同,與傳遞給這個函數的任何地址無關。
return &a;
此函數返回其按值參數的地址。 這是完全沒有意義的,因為一旦函數返回它的按值參數就不再存在。 它是傳遞給此函數的原始參數的副本,它會自動銷毀。 已經不復存在了。 它不再是。 它加入了隱形合唱團。 它渴望峽灣。 它是一個前變量。 調用者獲得一個指向被銷毀對象的指針,並試圖取消引用該指針會導致未定義的行為。
您的 C++ 教科書將有一章解釋什么是引用、它們在 C++ 中的工作方式以及如何通過引用而不是通過值將參數傳遞給函數。 在這種情況下,修改a
實際上會修改作為此函數參數的原始對象。 如果這樣做,您會發現兩個指針是相同的,因為函數參數將是對傳遞給它的原始參數的引用。 有關更多信息,請參閱您的 C++ 教科書。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.