In C, le funzioni non possono restituire tipi di array. Per i vostri scopi, si vuole restituire un puntatore a int
:
int *function(int a)
{
int *var = malloc(sizeof *var * tags); // where is tags defined?
// are you sure you don't mean a here?
...
return var;
}
Ciò allocare un blocco di memoria abbastanza grande da contenere tags
valori interi e assegnare l'indirizzo del primo elemento di quel blocco a var
. Si noti che var
è un puntatore a int
, non un puntatore a un array di int
. Quel puntatore è ciò che viene restituito dalla funzione.
è possibile utilizzare l'oprerator indice su un puntatore espressione come se fosse un array, in questo modo:
int a = ...;
int *arr = function(a);
...
arr[0] = 0;
arr[1] = 1;
...
arr
è un'espressione puntatore, non un'espressione array, così sizeof arr
restituirà la dimensione del tipo di puntatore, non della dimensione del blocco di memoria a cui punta (per questo, vorrai tenere traccia del numero di elementi che hai assegnato separatamente).
fonte
2012-04-03 17:08:35
Nota su C buona pratica: le istruzioni di Malloc dovrebbero essere 'T * var = malloc (sizeof (* var) * NUM);', è anche considerata buona pratica che la memoria possa allocare il chiamante, piuttosto che il callee . – Matt