微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在C ++中返回指针的函数

如何解决在C ++中返回指针的函数

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

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实际上将修改作为该函数参数的原始对象。如果这样做,您会发现两个指针都是相同的,因为function参数将是传递给它的原始参数的 引用 。有关更多信息,请参见C ++教科书。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。