我想创建一个有 4 个按钮的菜单。每个按钮都会进入另一个带有 4 个新按钮的菜单。同样,每个新按钮都会导致另一个带有新按钮的菜单,依此类推......
我计划为每个按钮提供一个功能。当我按下一个按钮时,相应的功能将打开一个新菜单。在我的第一个菜单中,假设我有一个名为
button1
的功能,它对应于第一个按钮。此功能将打开一个带有新按钮的新菜单。我必须将渲染器 SDL_Renderer* renderer
作为 &renderer
传递,并将其作为函数参数 SDL_Renderer** myRenderer
。
假设我在
button1
中有一个新函数,称之为 button2
。 button2
将打开一个带有新按钮的新菜单。如果我将渲染器传递为 &myRenderer
,button2
中的函数参数是否采用 SDL_renderer*** newRenderer
的形式?第10个菜单之后,功能参数会是SDL_renderer*********** 10thRenderer
吗?
对我来说,这看起来不太好,我想知道是否有另一种方法可以正确地做到这一点?
如果您只想利用/修改相同的指向对象,则不需要第二(或第三,或...)级间接。
如果
foo(thing *a)
被称为foo(&t)
,则foo
可以将bar(thing *b)
称为bar(a)
。它们都接收相同的指针&t
,指向同一个对象t
。
实践中:
#include <stdio.h>
typedef struct {
int value;
} Object;
static void bar(Object *b)
{
printf("pointer in %s: %p | value: %d\n", __func__, (void *) b, b->value);
}
static void foo(Object *a)
{
printf("pointer in %s: %p | value: %d\n", __func__, (void *) a, a->value);
bar(a);
}
int main(void)
{
Object o = { .value = 42 };
foo(&o);
}
pointer in foo: 0x7ffcdc3080a4 | value: 42
pointer in bar: 0x7ffcdc3080a4 | value: 42