SDL_CreateWindow函数中使用的指针

时间:2019-01-05 14:01:32

标签: c++ sdl-2

为什么在使用SDL_Window类型的指针然后将指针设置为等于SDL_CreateWindow函数时此语法有效?

SDL_Window * window = NULL;
window = SDL_CreateWindow("test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOSUNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);

我了解基本指针的工作原理,并且指针拥有一个内存地址,例如可以被引用:

int a = 7;
int* ptr = &a;
*ptr = 10;

这会将a的值从7更改为10。

由于指针必须包含一个内存地址,我很困惑为什么以下代码可以在SDL中工作:

SDL_Window * window = NULL;
window = SDL_CreateWindow("test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOSUNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);

尤其是为什么窗口= SDL_CreateWindow(。)不是内存地址?

我的另一种想法是,也许与用C编写SDL有关,但是我不认为这是原因。

2 个答案:

答案 0 :(得分:0)

我没有意识到该函数应该返回一个指针。但是现在这很有意义。谢谢。

答案 1 :(得分:0)

如果你看这里:https://wiki.libsdl.org/SDL_CreateWindow 您将看到函数的“语法”(即它的声明):

SDL_Window * SDL_CreateWindow(const char *title,
                              int x, int y, int w,
                              int h, Uint32 flags)

函数名之前的第一件事是返回类型, 实际上,它是指向 SDL_Window 对象的 * 指针。

您感到困惑的原因是许多页面和来源都声明 SDL_CreateWindow “返回一个 SDL_Window”,这根本不是真的。事实上,就在上面的声明之下,在同一页面上,它说的是 SDL_CreateWindow:

<块引用>

“返回创建的窗口”

... 显然具有误导性(尤其是对我们菜鸟而言)。无论如何,它返回一个(指针)变量,其中包含 SDL_Window 的位置,正如您在评论中(有些粗鲁地)所言,现在已经知道了。

干杯,很高兴我能和你一起学习。