Я работаю над программой на языке C, которая содержит массив указателей на структуры. Сначала структура выглядит следующим образом:возвращающий указатель на массив указателей структуры
typedef struct
{
int ID;
char Name [20];
} rec;
Тогда у меня есть функция, которая создает 1 из этих структур:
struct rec* addEntry(){
rec *temp;
temp = malloc(sizeof(rec));
printf("Please give me an ID number\n");
scanf("%d", &temp->ID);
printf("Now give me a name, maximum size for this is 20 characters\n");
scanf("%s", &temp->Name);
return temp;
}
Теперь эта функция работает нормально, это создает структуру и возвращает указатель в стороне, что структура Я тогда другая функция, которая создает массив указателей и заполняет его с указателями в стороне:
структурstruct rec* returnPointerToPointerArray()
{
rec *pointerArray[2];
pointerArray[0] = addEntry();
pointerArray[1] = addEntry();
printf("ID in main : %d\n", pointerArray[0]->ID);
printf("Name in main : %s\n", pointerArray[0]->Name);
printf("ID in main : %d\n", pointerArray[1]->ID);
printf("Name in main : %s\n", pointerArray[1]->Name);
pointerArray = malloc(sizeof(rec*)*2);
return pointerArray;
}
Для проверки того, что происходит, я печатаю значения, которые хранятся в местах в массиве указателей. В этот момент значения в массиве указателей правильны.
Однако теперь мне нужно создать malloc для этого указателяArray и вернуть указатель на этот массив указателей, и именно там я застрял.
таНос линия дает мне ошибку:
error: incompatible types when assigning to type 'struct rec *[(sizetype)(size)]' from type 'void *'
Теперь уточнить, я не могу использовать связанный список, я должен использовать массив указателей вместо этого. Чтобы добавить в моем главном цикле у меня есть другая ошибка в следующем кусочке кода:
rec *pointerArray[2];
pointerArray = returnPointerToPointerArray(2);
printf("ID in main : %d\n", pointerArray[0]->ID);
printf("Name in main : %s\n", pointerArray[0]->Name);
Это дает мне следующее сообщение об ошибке:
error: incompatible types when assigning to type 'struct rec *[2]' from type 'struct rec *'
Любая помощь более чем приветствуется.
Спасибо заранее, Ильва
'pointerArray = таНос (SizeOf (прн *) * 2);' не будет работать и в любом случае слишком поздно для того, что вы намеревались с тех пор, как вы уже пытались запастись в него. 'pointerArray' - это массив автоматического хранения, а не указатель, поэтому вы не можете его malloc. –
Но если бы я вернул указатель на этот массив, тогда массив не исчезнет, так как он объявлен локально? – Ylva
Вы создали указатели на структуру в обеих функциях, не инициализируя их точкой в любом месте перед их использованием. Я написал пример ниже (были ошибки при первом написании, они были протестированы сейчас) – ryyker