2015-10-20 3 views
0

Я новенькая C и я пытаюсь создать глобальный массив, который будет содержать указатели на структуры:Как инициализировать глобальный массив, содержащий указатели на структуры?

person* persons[n]; 

Однако, мне нужно сделать выше глобальной переменной. Для этого мне нужно объявить его вне всех функций. Но как я могу это сделать, не зная, что такое n? Действительно потерянная здесь, любая помощь будет оценена!

Ниже то, что я в конечном счете пытается выполнить:

person* persons[]; 

function() { 
    initialize global array here 
} 

ответ

3

Вы используете указатель через указатели и вызвать malloc в функции инициализации.

person **persons; 
int n = 42; 

void init(void) 
{ 
    persons = malloc(n * sizeof *persons); 
    if (!persons) { 
     /* handle malloc failure here */ 
    } 
} 
+0

Могу ли я использовать индексы для ссылок на структуры из этого нового указателя указателей (как и в регулярном массиве, содержащем указатели)? – Vimzy

+0

@Vimzy да, например 'persons [0]' - это первый 'person *' объекта массива. – ouah

+0

@ Неудержимо, это было плохо. Моя единственная проблема теперь в том, могу ли я сделать код следующим образом: "persons [h] = (person *) malloc (sizeof (person))« Я немного новичок в этом «указателе на указатель» с помощью structs. – Vimzy