2015-05-05 3 views
0

Я объявил глобальный массив, char *people[][2]. Цель этого массива для хранения и фамилии людей в форме:malloc для 2D-массива

people[0][0]   = "John"   people[0][1]   = "Smith" 
people[1][0]   = "Frank"   people[1][1]   = "Jones" 
...          ... 
people[NumOfNames][0] = "Lisa"   people[NumOfNames][1] = "Murray" 

Где NumOfNames является целой переменной вычисляется в функции в моей программе. Как только это значение было сохранено для NumOfnames, как я могу использовать malloc для распределения памяти до people, так что он имеет размер [NumOfNames]*[2]?

+1

Во-первых, я думаю, что фактические имена не являются буквальными строками, а читаются откуда-то? Во-вторых, для решения вашей проблемы вам понадобятся два цикла, один вложенный внутри другого, для распределений. –

+0

@JoachimPileborg Да, имена читаются из файла. Не могли бы вы рассказать о идее вложенных петель? Я очень новичок в функции 'malloc'. – KOB

+3

Если вам действительно не нужно это делать, лучший способ - использовать структуру, содержащую имя и фамилию. Тогда вам нужен только один размерный массив для хранения каждого человека. И имеет дополнительное преимущество, заключающееся в том, что он легко расширяется для большего количества атрибутов человека (например, возраст, высота и т. Д.). Вам просто нужно добавить больше полей в структуру. – kaylum

ответ

0

Это легко, как только вы знаете синтаксис для многомерных массивов:

size_t peopleCount = ...; 
char* (*people)[2] = malloc(peopleCount*sizeof(*people)); 

Обратите внимание, что people здесь, как всегда для malloc() ред массивов, указатель на первый элемент массива, я. е. указатель на массив из двух указателей на char. В вызове malloc() просто выделяется память для peopleCount таких элементов. Используя этот тип указателя, вы можете использовать массив malloc() ed точно так же, как вы используете массив people в своем вопросе.

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