C语言 避免多个指针作为函数参数[关闭]

snz8szmq  于 2023-10-16  发布在  其他
关注(0)|答案(1)|浏览(91)

**已关闭。**此问题需要debugging details。它目前不接受回答。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
上个月关门了。
Improve this question
我想创建一个菜单上有4个按钮。每个按钮将导致另一个菜单与4个新按钮。同样,这些新按钮中的每一个都将导致另一个带有新按钮的菜单等等。
我计划每个按钮都有一个功能。当我按下一个按钮,相应的功能将打开一个新的菜单。在我的第一个菜单中,假设我有一个名为button1的函数,它对应于第一个按钮。此功能将打开一个带有新按钮的新菜单。我必须将渲染器SDL_Renderer* renderer作为&renderer传递,并将其作为函数参数SDL_Renderer** myRenderer
假设我在button1中有一个新函数,称之为button2button2将打开一个带有新按钮的新菜单。如果我将渲染器作为&myRenderer传递,那么button2中的函数参数是否采用SDL_renderer*** newRenderer的形式?在第10个菜单之后,功能参数是否为SDL_renderer*********** 10thRenderer
对我来说,这是不好看,我想知道是否有另一种方法来正确地做到这一点?

8fsztsew

8fsztsew1#

如果您只是想利用/修改同一个指向的对象,则不需要第二(或第三,或...)级间接寻址。
如果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

相关问题