2013-11-24 49 views
0

所以我認爲:結構作爲成功函數的參數...小錯誤需要修復。 (C)

typedef struct { 
    int score; 
    char init; 
} Student; 

int changestuff(Student *students) { 

    students->score = 100; 

    students++; 

    students->score = 200; 

    changestuffagain(students); 

} 

int changestuffagain(Student *students) { 

    students->score = 100; 

    students++; 

    students->score = 200; 
} 

int main() { 

    Student students[2]; 

    changestuff(students); 


} 

我調用函數changestuff並正確modifiys的玩家[0]和球員socre [1],但我一點問題,就是當我打電話第二個函數changestuffagain,參數不通過玩家[0]和玩家[1],它只傳遞玩家[1](玩家在致電changestuffagain時的價值)

我該如何解決這個問題?

回答

2

那麼,這就是你告訴它要做的。當你的changestuff函數調用changestuffagain時,你已經增加了students的值,所以它現在指向數組中的第二個Student。如果你想把指針放在同一個地方,你應該傳遞非遞增的值。

+0

所以唯一的辦法是撥打第二函數之前減少了嗎? – jorgecf

+1

@ user3027143只是使用'學生[0]'和'stunders [1]'在變化等等,而不是增加指針。 – 2013-11-24 16:25:37

+0

這是一個好主意,如果我明確地使用了位置,我應該使用球員[0] .score或球員[0] - >得分? – jorgecf

1

當您撥打students++時,您跳轉到下一個存儲位置,在該位置分配一個Student(在您的案例中爲students[1])。在致電changestuffagain()之前,您可以遞減students

例如:

students--; 
changestuffagain(students); 
+0

是的,我這樣做,我得到它的工作,我想我會這樣做 – jorgecf