使用 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 值直接写入调用函数中指向的变量。
有关按值调用和按引用调用之间的区别的教程,请参阅这些链接:
我的目标是创建新的 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 值直接写入调用函数中指向的变量。
有关按值调用和按引用调用之间的区别的教程,请参阅这些链接: