何时应该在结构中使用指向结构的指针?

时间:2017-04-24 21:10:44

标签: c pointers struct structure

我想知道何时应该使用指向结构中结构的指针。

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

例如:

#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;
}

2 个答案:

答案 0 :(得分:5)

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

另一方面,如果玩家和套牌之间始终存在一对一的对应关系,则应该嵌套结构。

答案 1 :(得分:1)

如果您编写未正确发现的部件,这两个选项都应该有效。

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

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