C++中返回指针的函数

Luc*_*ito 2 c++ pointers function

我已经开始学习指针,最后我提出了一个关于函数和指针的问题。我创建了一个简单的函数,它应该返回整数类型的地址/指针。但是,使用“&”打印地址后,它与函数返回的地址不同。我在这里缺少什么?

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
Run Code Online (Sandbox Code Playgroud)

Sam*_*hik 7

int* address_ofInt(int a) {
Run Code Online (Sandbox Code Playgroud)

这在 C++ 中称为“按值传递”。这意味着无论调用者传递什么,作为函数的参数,都会有效地创建一个副本,这a就是它的内容。这个函数可以修改 this a,它不会影响原始参数,因为它只是一个副本。

这a是一个完全独立的对象或变量,其地址完全不同,与传递给该函数的任何地址无关。

 return &a;
Run Code Online (Sandbox Code Playgroud)

此函数返回其按值参数的地址。这是完全没有意义的,因为一旦函数返回它的按值参数就不再存在。它是传递给此函数的原始参数的副本,它会自动销毁。已经不复存在了。它不再是。它加入了隐形合唱团。它渴望峡湾。它是一个前变量。调用者获得一个指向被销毁对象的指针,并试图取消引用该指针会导致未定义的行为。

您的 C++ 教科书将有一章解释什么是引用、它们在 C++ 中的工作方式以及如何通过引用而不是通过值将参数传递给函数。在这种情况下,修改a实际上会修改作为此函数参数的原始对象。如果这样做,您会发现两个指针是相同的,因为函数参数将是对传递给它的原始参数的引用。有关更多信息,请参阅您的 C++ 教科书。