Я хочу создать массив void * 1d, каждый указатель в каждой ячейке указывает на структуру, которую я написал (он должен быть void * array, а не sturct array по некоторым причинам †), до сих пор я написал это:void * указывает на структуру?
typedef struct
{
int weight;
int amount;
} Banana;
void* makeBanana(){
Banana new;
new.weight = 1;
new.amount = 6;
void* p = &new; //its Legal??
return p;
Теперь, после того, я хочу, чтобы сохранить этот р в динамическом массиве недействительных * указателей, каждый из которых недействительными * указатель указывает на соседний банан, я написал:
void* ptrToBananaArray = (void*)malloc(3); //3 is just example of lenght
ptr[0] = makeBanana();
это нормально, или нет? а если нет, то какой правильный способ?
† Причины для использования void*
вместо Banana*
: его, потому что у меня есть общий код elswhere, которые получают только void*
типов, поэтому здесь свой банан, но в будущем он будет хотеть, чтобы получить также помидоры или лук или что-то еще, поэтому он должен быть недействительным *
NG. 'void * p = &new; return p;': 'p' указывает на локальную переменную. недействителен во внешнем масштабе. – BLUEPIXY
makeBanana() должен возвращать указатель на пустоту, которая не имеет смысла. – Rob
Если вы используете 'void *', ваш код будет сложнее писать и читать. По некоторым причинам вы указали «не стойкий массив» - каковы эти причины? Вы должны описать их, чтобы мы могли понять, важнее ли они иметь чистый код. – anatolyg