2017-04-24 27 views
2

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

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

例如:

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

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

回答

5

使用指针,如果需要进行indepdendently管理的两种结构的寿命。如果您可以让多个玩家使用同一套牌,则需要使用指针,以便它们都可以引用它。或者,如果您需要在保持其甲板周围的情况下释放播放器,反之亦然,则应使用指针。另一方面,如果玩家和甲板之间总是存在一对一的对应关系,则应该嵌套这些结构。

+1

好的,我更加明白,非常感谢! :) – titimlb

1

只要您没有正确发现未包含的部分,这两个选项都应该有效。

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

(只要你不打算重用甲板,当然。)

+0

谢谢你的解释。这终究只是一个使用或不使用玩家结构的问题。 :) – titimlb