我有两个整数指针,用于保存(SDL)屏幕高度和宽度的数据(以像素为单位)。他们在这里宣布:
int *w = nullptr;
int *h = nullptr;
在这里给出值:
int SDL_GetRendererOutputSize(SDL_Renderer* renderTarget, int *w, int *h);
并在此处使用:
Dest.w = (*w / 2.0f - 58 / 2.0f, *h / 2.0f - 8 / 2.0f);
Dest.h = (*w / 2.0f - 58 / 2.0f, *h / 2.0f - 8 / 2.0f);
Dest.x = (*w / 2.0f - 58 / 2.0f, *h / 2.0f - 8 / 2.0f);
Dest.y = (*w / 2.0f - 58 / 2.0f, *h / 2.0f - 8 / 2.0f);
然而 * w 和 * h 保持nullptrs。这是为什么?
答案 0 :(得分:5)
在C(以及某种程度上C ++)中的常见做法是,如果您正在编写一个返回多个值的函数,则调用者必须提供指向输出将放入的变量的指针。
所以,你可以这样调用这个函数:
int w=0,h=0;
int result = SDL_GetRendererOutputSize(renderTarget, &w, &h);
if (result!=0) {
// handle an error here
}
请注意,w和h是普通的整数变量。我将这些变量的地址传递给SDL_GetRendererOutputSize
(&
运算符获取其参数的地址);该函数可能会设置变量。
不要忘记查阅函数的返回值,如果出现错误,则在这种情况下不为零。
答案 1 :(得分:0)
我认为你需要做的是实际为高度和宽度分配两个整数,然后将它们的地址传递给函数。
int w = 0, h = 0;
// Tell the function where to put the height and width by passing in the address of the two.
// Assuming renderTarget is in scope.
SDL_GetRendererOutputSize(renderTarget, &w, &h);
当然,您必须使用它们更改代码。好消息是,它会使代码更简单。
答案 2 :(得分:0)
通过将它们设置为零,您将声明它们。它告诉程序它们将保存一个整数(数字)。从那以后呢?此外,指针完全听起来像它。它指向您存储在(int)位置的内容。因此,一旦为变量'w'和'h'输入一些整数,它们将在您使用指针时显示。指针只会告诉您存储在您选择查看的位置的内容。我希望这能为你解决问题!