簡體   English   中英

C++中返回指針的函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM