【问题标题】:When should a pointer to a structure should be use in a structure or not?什么时候应该在结构中使用指向结构的指针?
【发布时间】:2017-04-24 21:10:44
【问题描述】:

我想知道什么时候应该在结构中使用指向结构的指针。

例如,我清楚地理解为什么我们在链表中使用指向结构的指针,但在另一种情况下我遇到了问题。

例如:

#include <stdlib.h>
#include <string.h>

#define NICK_MAX_LENGTH 100

struct deck {
    size_t nb_cards;
    int *cards;
}

// Should I do :
struct player {
    int id;
    char nick[NICK_MAX_LENGTH];
    struct deck *pl_deck;
}

struct player* my_function1() {
    struct player *pl = malloc(sizeof(struct player));
    pl->id = 1;
    strcpy(pl->nick, "Paul")
    pl->pl_deck = malloc(sizeof(struct deck));
    pl->pl_deck->nb_cards = 3;

    for (int i = 0; i < 3; ++i)
        pl->pl_deck->cards[i] = i + 1;

    return pl;
}

// .. or should I do :
struct player {
    int id;
    char nick[NICK_MAX_LENGTH];
    struct deck pl_deck;
}

struct player* my_function2() {
    struct player *pl = malloc(sizeof(struct player));
    pl->id = 2;
    strcpy(pl->nick, "Matt")

    struct deck pl_deck;
    pl_deck.nb_cards = 3

    for (int i = 0; i < 3; ++i)
        pl_deck.cards[i] = i + 1;

    pl->pl_deck = pl_deck;

    return pl;
}

【问题讨论】:

  • 欢迎来到 StackOverflow。请参观stackoverflow.com/tour,学习提出好问题stackoverflow.com/help/how-to-ask,制作MCVE stackoverflow.com/help/mcve 不清楚你的问题是什么,或者你有什么问题用你的代码。也许一个完整的 MCVE 和不满意的例子会有所帮助。

标签: c pointers struct structure


【解决方案1】:

如果需要独立管理两个结构的生命周期,请使用指针。如果您可以让多个玩家使用同一套牌,则需要使用指针,以便他们都可以引用它。或者,如果您需要在保持牌组周围的同时释放玩家,反之亦然,您应该使用指针。

另一方面,如果玩家和牌组之间总是一一对应,则应该嵌套结构。

【讨论】:

    【解决方案2】:

    只要你写出你没有正确发现的部分,这两个选项都应该有效。

    但请注意,您的 deck 是一个小型结构,存储开销非常小,而且由玩家唯一拥有,因此组合可能是一个更现实的选择,以消除指针管理的所有复杂性。

    (当然,只要你不打算重复使用这些套牌。)

    【讨论】:

    • 感谢您的解释。这最终只是一个使用或不使用播放器结构的问题。 :)
    猜你喜欢
    • 2010-10-19
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多