2013-11-24 3 views
0

В моем коде я получил-структуру этого вида и две функции:Передача структуры через несколько функций в C?

typedef struct { 
    char team; 
    int score; 
} Player; 

myfunc1 (Player *players) { 
    players->score = 105; 
    myfunc(?); 
} 

myfunc2(?) { 
    //change again points and team character 
} 

И в основном я создаю массив этой структуры и передать его функцию:

int main() { 
    Player players[2] 

    myfunc1(players) 

} 

Я получаю работайте с первой функцией, но я не знаю, какой аргумент я должен передать от первого ко второму, чтобы изменить массив игроков [2], созданный в основном.

ответ

3

Вы можете снова использовать простой указатель для доступа к данным из players:

void myfunc2 (Player *player) 
{ 
    players->score = 123; 
} 

вызова его из myfunc1 так:

myfunc2(players); 

Вы фактически передать адрес к структуре игрока хранимого в указателе Player* players (в функции myfunc1) в переменную локального указателя Player *player в функции myfunc2.

Чтобы изменить игрок [1] ​​в ваших main функцию, вызовите myfunc1 так:

int main() { 
    Player players[2] 

    myfunc1(&players[1]); // & = give an address to your struct 
} 

Будьте осторожны индексы массива, они начинают с нуля, так что если уй есть массив емкость два (Player players[2]), то есть только два действительных индекса: 0 a 1. Если вы получаете доступ к индексам, то возможно, что ваш код рано или поздно сработает.

+0

О, спасибо, это было то, что я действительно искал. Итак, чтобы передать массив массива структуры, например, 5 функций, все fnctions получают тот же arg .. cool – jorgecf

Смежные вопросы