为什么在使用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有关,但是我不认为这是原因。
答案 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 的位置,正如您在评论中(有些粗鲁地)所言,现在已经知道了。
干杯,很高兴我能和你一起学习。