Мне нужно:
a) определить тип данных (по моему собственному выбору) с именем mytype .
b) и иметь функцию getmemory (int n ), зарезервировать память для n значений типа mytype и вернуть указатель. Я реализовал это, как показано ниже:
typedef int mytype;
// b)
mytype *getmemory(int n)
{
mytype *p;
//allocate space for n values of mytype.
p = (mytype *)malloc(n * sizeof(mytype));
return p;
}
Теперь я хочу изменить код, чтобы зарезервировать и вернуть память для n указателей на mytype . Я не уверен, как это сделать, я много искал в inte rnet (также в StackOverflow), но я все еще не уверен, как лучше всего решить задачу. Ниже у меня есть два возможных решения, и я хотел бы знать, какое из них правильное.
Решения:
1. Решение:
mytype **getmemoryForNPointer(int n_pointers, int n_mytype)
{
mytype **p = NULL;
p = (mytype **) malloc(n_pointers * sizeof(mytype *));
return p;
}
2. Решение
mytype **getmemoryForNPointer(int n_mytype, int n_pointers)
{
mytype **p = NULL;
//allocate n pointers to mytype first:
p = (mytype **) malloc(n_pointers * sizeof(mytype*));
//I'm not sure the for loop belongs in there.
for (int i = 0; i < n_pointers; i++)
{
// For each such pointer, allocate space for n mytype-values.
p[i] = (mytype *)malloc(n_mytype * sizeof(mytype));
}
return p;
}
- следующий код эквивалентен второму коду?
mytype **getmemoryForNPointer(int n_mytype, int n_pointers)
{
mytype *p[n_pointers];
for (int i = 0; i < n_pointers; i++)
{
p[i] = (mytype *)malloc(n_mytype* sizeof(mytype));
}
return p;
}