c++ - C++中返回指针的函数

标签 c++ function pointers

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

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++ 教科书。

关于c++ - C++中返回指针的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64707410/

相关文章:

c++ - 使用范围库初始化std::vector

django - 如何从 Django 中的方法正确返回值?

c - 寻找我参加的旧测试的答案,试图了解我应该做什么。(也许是 Malloc 函数?)

c++ - 在 C++ 中为指针数组定义 NULL

c++ - C++中的指针;段错误错误 :

c++ - 3 个共线点 - 一些错误

c++ - 如何提高键类型为 std::string 的 map 查找的性能?

javascript - 为什么我的数组中有空项目,我该如何摆脱它们?

c++ - 我能保证所有指针都具有相同的字节大小吗?

c++ - 我可以安全地使用#ifdef 来了解是否包含 c++ std header 吗?