避免使用多个指针作为函数参数

问题描述 投票:0回答:1

我想创建一个有 4 个按钮的菜单。每个按钮都会进入另一个带有 4 个新按钮的菜单。同样,每个新按钮都会导致另一个带有新按钮的菜单,依此类推......

我计划为每个按钮提供一个功能。当我按下一个按钮时,相应的功能将打开一个新菜单。在我的第一个菜单中,假设我有一个名为

button1
的功能,它对应于第一个按钮。此功能将打开一个带有新按钮的新菜单。我必须将渲染器
SDL_Renderer* renderer
作为
&renderer
传递,并将其作为函数参数
SDL_Renderer** myRenderer

假设我在

button1
中有一个新函数,称之为
button2
button2
将打开一个带有新按钮的新菜单。如果我将渲染器传递为
&myRenderer
button2
中的函数参数是否采用
SDL_renderer*** newRenderer
的形式?第10个菜单之后,功能参数会是
SDL_renderer*********** 10thRenderer
吗?

对我来说,这看起来不太好,我想知道是否有另一种方法可以正确地做到这一点?

c pointers sdl
1个回答
0
投票

如果您只想利用/修改相同的指向对象,则不需要第二(或第三,或...)级间接。

如果

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
© www.soinside.com 2019 - 2024. All rights reserved.