gpt4 book ai didi

c++ - 如何正确地将指针传递给 C++ 中的函数,以便直接在该指针上运行的另一个函数?

转载 作者:行者123 更新时间:2023-11-30 01:45:06 26 4
gpt4 key购买 nike

我正在学习使用 SDL2 库创建 C++ 应用程序,但在尝试组织代码时遇到了问题。

这里有一个简单的例子来说明这种情况:

void createWindow (SDL_Window *gameWindow)
{
gameWindow = SDL_CreateWindow(/* arguments here */);
}

int main (int argc, char* argv[])
{
SDL_Window* gameWindow = NULL;
createWindow(gameWindow);
// some code here...
}

为什么不起作用?当我尝试编译代码时,SDL_GetError() 尖叫:“渲染器无效”。

当我这样做的时候

SDL_Window* createWindow (SDL_Window* gameWindow)
{
gameWindow = SDL_CreateWindow (/* arguments here*/);
return gameWindow;
}

它有效。但我不喜欢那样。

我可能不了解指针或 SDL2 对它们的工作方式,但我认为将指针传递给函数可以让我直接对变量而不是拷贝进行操作,因此我不必返回任何内容。对我来说,看起来我是在操作变量地址的拷贝,而不是变量本身。

最佳答案

C 中的参数是按值传递,也就是说,参数被复制并且应用于函数中参数的每个修改都会改变该拷贝的值,而不是实际传递的参数强>.

通过以下方式解决问题

  • 传递对指针的引用:

    void createWindow (SDL_Window*& gameWindow)
    {
    gameWindow = SDL_CreateWindow(/* arguments here */);
    }
  • 将指针传递给指针。当心:这是 C-ish 和糟糕的 C++ 代码!

    void createWindow (SDL_Window** gameWindow)
    {
    *gameWindow = SDL_CreateWindow(/* arguments here */);
    }
  • 返回指针:

    SDL_Window* createWindow()
    {
    return SDL_CreateWindow(/* arguments here */);
    }

关于c++ - 如何正确地将指针传递给 C++ 中的函数,以便直接在该指针上运行的另一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35060026/

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