gpt4 book ai didi

c++ - 为什么我不能通过将指针传递给函数来初始化数组?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:43 25 4
gpt4 key购买 nike

我知道这有一个非常简单的解释,但我已经因为暂时不用指针而被宠坏了。

为什么我不能在 C++ 中做这样的事情

int* b;
foo(b);

并通过...初始化数组

void Something::foo(int* a)
{
a = new int[4];
}

在调用 foo(b) 之后,b 仍然是 null。这是为什么?

最佳答案

指针按值传递给函数。本质上,这意味着指针值(但不是指针!)被复制了。您修改的只是原始指针的拷贝。

有两种解决方案,都使用了额外的间接层:

  1. 要么使用引用:

    void f(int*& a) {
    a = new int[4];
    }
  2. 或者您传入一个指向指针的指针(在您的情况下,对于 out 参数不太常规):

    void f(int** pa) {
    *pa = new int[4];
    }

    然后像这样调用函数:

    f(&a);

就我个人而言,我不喜欢这两种风格:参数是函数输入,输出应该由返回值处理。到目前为止,我还没有看到在 C++ 中偏离这条规则的令人信服的理由。因此,我的建议是:改为使用以下代码。

int* create_array() {
return new int[4];
}

关于c++ - 为什么我不能通过将指针传递给函数来初始化数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1260510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com