使用 C 中的地址将 SDL_Window* 结构传递给函数

Passing an SDL_Window* struct to a function using address of in C

我的目标是创建新的 mini windows 或单独 windows 需要更少的代码。 而不是:

SDL_Window* window = SDL_CreateWindow("Hello World", 
                                      SDL_WINDOWPOS_UNDEFINED, 
                                      SDL_WINDOWPOS_UNDEFINED,
                                      h, w,
                                      flags);

更像是:

SDL_Window* message_box;
createMessageBox(&message_box, "Message Box");

使用函数 createMessageBox:

void createMessageBox(SDL_Window* message_box, char title[10]) {
    const int MESS_WINDOW_HEIGHT = 240;
    const int MESS_WINDOW_LENGTH = 180;
    
    Uint32 message_box_flags = SDL_WINDOW_SKIP_TASKBAR | SDL_WINDOW_ALWAYS_ON_TOP;
    message_box = SDL_CreateWindow(title, 
                                   SDL_WINDOWPOS_UNDEFINED,
                                   SDL_WINDOWPOS_UNDEFINED,
                                   MESS_WINDOW_HEIGHT,
                                   MESS_WINDOW_LENGTH,
                                   message_box_flags);
}

但我的问题是出现错误:

error: cannot convert SDL_Window** to SDL_Window*
createMessageBox(&message_box, "Message Box");
                 ^~~~~~~~~~~~

我对编译器在这里谈论的内容一无所知。 什么是 SDL_Window**。我试着在网上四处寻找,但找不到任何相关信息。

就我而言,这应该行得通吗?

完整错误:

g++ main.c -w -lSDL2 -o test
main.c: In function int main():
main.c:64:19: error: cannot convert SDL_Window** to SDL_Window*
    createMessageBox(&message_box, "Message Box");
                     ^~~~~~~~~~~~
main.c:12:35: note:   initializing argument 1 of void createMessageBox(SDL_Window*, char*)
    void createMessageBox(SDL_Window* message_box, char title[10]) {
                          ~~~~~~~~~~~~^~~~~~~~~~~
make: *** [Makefile:19: all] Error 1

p.s 我已经知道 SDL_ShowMessageBox 这不是我真正想要的。

如果你想通过函数createMessageBox的引用来传递SDL_Window*类型的变量,那么你必须传递一个指向该指针的指针,即你必须传递一个[=]类型的参数16=]。所以你应该改变函数参数

void createMessageBox(SDL_Window* message_box, char title[10])

至:

void createMessageBox(SDL_Window** message_box, char title[10])

现在,您可以更改行

message_box = SDL_CreateWindow(title, [...]

至:

*message_box = SDL_CreateWindow(title, [...]

这会将 SDL_CreateWindow 的 return 值直接写入调用函数中指向的变量。

有关按值调用和按引用调用之间的区别的教程,请参阅这些链接: