В C, если вам нужно вернуть массив из функции, вам необходимо выделить память для него с помощью malloc, а затем вернуть указатель, указывающий на вновь выделенную память.
После того, как вы закончите работу с этой памятью, вам понадобится free.
Что-то вроде:
#include <stdlib.h> /* need this include at top for malloc and free */
int* foo(int size)
{
int* out = malloc(sizeof(int) * size); /* need to get the size of the int type and multiply it
* by the number of integers we would like to return */
return out; /* returning pointer to the function calling foo().
* Don't forget to free the memory allocated with malloc */
}
int main()
{
... /* some code here */
int* int_ptr = foo(25); /* int_ptr now points to the memory allocated in foo */
... /* some more code */
free(int_ptr); /* we're done with this, let's free it */
...
return 0;
}
Это в стиле C, как он получает :) Есть, вероятно, другие (возможно, более подходящие) способы сделать это в Objective C. Однако, как Objective C считается строгим надмножество C, это также сработает.
Если я могу дополнительно расширить необходимость использования указателей. Массивы C-стиля, выделенные в функции, считаются local, после того как функция выходит за рамки, они автоматически очищаются.
Как указано другим плакатом, возврат из стандартного массива (например, int arr[10];
) из функции является плохой идеей, так как к тому времени, когда массив возвращается, он больше не существует.
В C мы обходим эту проблему, динамически выделяя память, используя malloc
и указав указатель на эту память.
Однако, если вы не освободить эту память адекватно, вы можете ввести утечку памяти или какое-либо другое неприятного поведение (например, free
-ный на malloc
-ED указателя дважды будет производить unwanted results).
Что не так с кодом, который вы указали? – borrrden
Он не возвращает массив. – mlclmss
Что такое 'лабиринт', и где вы его устанавливаете и доступ к нему? –