2012-03-16 131 views
0

我目前正在使用C語言編寫基於文本的遊戲,並且在發生某些事件時遇到了改變值的問題。下面是我的一些數據結構代碼:指向不同結構內結構的指針。 C

typedef struct player { 
     int maxhealth; 
     int curhealth; 
     int in_combat; 
     monster c_enemy; 
     char *class; 
     char *condition; 
     rooms c_room; 
     inventory i; 
     stats stats; 
    } player; 

現在,我想的,而不是指向一個房間我的問題是,我現在有c_room(當前室)作爲客房。這稍後會影響我,因爲我需要在當前房間的結構房間內改變像n_monsters這樣的東西。但是,當我通過執行p.c_rooms.n_monsters - = 1修改它時,我不確定它會改變我應該提到的房間的n_monsters的實際價值。我已經通過在n_monsters爲0時離開房間來測試這一點,然後回來看它回到默認值1。

所以是啊,我該怎麼指向右邊的房間? 剛:

typedef struct player {   
     int maxhealth; 
     int curhealth; 
     int in_combat; 
     monster c_enemy; 
     char *class; 
     char *condition; 
     rooms *c_room; // Like this? 
     inventory i; 
     stats stats; 
    } player; 

// And then the assignment would look like: 
c_room = *rooms[3]; <- an array of rooms for the dungeon in the game. 
+0

你不告訴我們什麼是「房間」。它是'typedef'-ed'struct'嗎? – 2012-03-16 06:44:33

+1

看起來合理;是否有什麼讓你覺得這不起作用? – mfrankli 2012-03-16 06:45:28

+0

我想你想c_room =&(room [3]); //指向4間房間,如果你有房間* c_room; – Glenn 2012-03-16 06:50:18

回答

1

假設c_room是一個普通的結構,而不是一個指針,那麼你是對的。

如果你有

struct A { 
    int v; 
}; 

struct B { 
    struct A a; 
} 

A a; 
a.v = 3; 

B b; 
b.a = a; 

這實際上的a內容複製裏面B.a因爲它們是由價值分配。它們將是兩個不同的A,對其中一個的任何修改都不會反映在另一個上。

在你情我願做這樣的事情:

struct Room { 
    // whatever 
} 

struct Room rooms[MAX_ROOMS]; 

struct Player { 
    struct Room *room; 
} 

Player p; 
p.room = &rooms[index]; 

現在您就可以通過p->room正確地引用到房間,這將只是一個指向實際房間。

+0

謝謝,這真的很有幫助。是的,我是一個巨大的麻煩,通過改變所有「。」的「 - >」的,但現在它完美的作品!再次感謝你。 – atb 2012-03-16 07:03:33

+0

不要忘記使用'valgrind'來檢查你沒有內存泄漏。 – 2012-03-16 08:55:13