2014-09-03 4 views
0

Мне нужно создать структуру. Затем создайте массив, содержащий 7 из этих структур. Затем передайте его через 3 функции и измените значение массива struct внутри функций и передайте его обратно в main. Я знаю, как создать структуру. Итак, давайте идти с этим:Массивы, структуры, функции

struct election{ 
    char name[20]; 
    int votes; 
    }; 

Я предполагаю, что делает массив будет:

struct election electionCandidates[6]; 

Для того, чтобы пройти через функцию. Как мне это сделать? И проще ли вернуть массив структуры или передать его в виде указателя?

Это может быть совершенно неверно, но я всегда чувствую, что люди охотнее помогают, если видят, что я на самом деле пытаюсь решить эту проблему, а не просто просить помощи, потому что я ленивый или что-то в этом роде.

void Initialize(election *electionCandidates[]); 

Или, может быть, это?

struct election Initialize(struct electionCandidates[] 

Благодарим за любые полезные комментарии.

+1

'void Инициализация (выборные выборыCandidates []);'. Используя это, вы уже передаете 'electionCandidates' как указатель, чтобы вы могли изменять все, что захотите, в содержимом этих структур, и вам не нужно ничего возвращать из функции. –

+1

'void initialize (выборы выборовCandidates [], int numberOfCandidates);' – Arkadiy

+0

или 'void Initialize (struct election * electionCandidates);' – BLUEPIXY

ответ

0
void Initialize(election *electionCandidates[]); 

Синтаксис неправильный: вы должны сказать struct election.
С другой стороны, вы объявляете там параметр, имеющий тип «указатель на массив структурных выборов», но вам нужен «массив структурных выборов».

Итак, правильная версия:

void Initialize(struct election electionCandidates[]); 

Поскольку в качестве аргументов функции каждого объявления массива «распады» к указателю, это было бы эквивалентно:

void Initialize(struct election *electionCandidates); 

следующий синтаксис также неправильно :

struct election Initialize(struct electionCandidates[] 

правильным является:

struct election Initialize(struct election electionCandidates[]) 

Однако эта форма выглядит не так логично, потому что вы возвращаете только 1 struct. Что и почему?

Элементы массива параметра electionCandidates могут быть изменены и восстановлены без проблем на main(), поэтому возврат void здесь кажется правильным.

Может быть, было бы лучше, чтобы определить псевдоним для типа struct election:

typedef struct election election_t; 

Тогда мы пишем:

void Initialize(election_t electrionCandidates[]) 

Было бы очень желательно, чтобы вы передаете число кандидатов, второй параметр, поскольку функция не имеет способа определить размер массива:

void Initialize(election_t electrionCandidates[], int num) 

Затем вы делаете вызов таким образом:

Initialize(electionCandidates, 6); 

Здесь, «магия» число 6 является количество элементов в массиве.

+0

Спасибо за помощь! Я дам вам знать, если это сработает! – ArtisticMelody

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