En C, las funciones no pueden devolver los tipos de matriz. Para sus propósitos, que desea devolver un puntero 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;
}
Esto le asignará un bloque de memoria lo suficientemente grande como para contener tags
valores enteros y asigne la dirección del primer elemento de ese bloque a var
. Tenga en cuenta que var
es un puntero a int
, no un puntero a una matriz de int
. Ese puntero es lo que se devuelve de la función.
se puede utilizar el oprerator subíndice en una expresión puntero como si fuera un array, así:
int a = ...;
int *arr = function(a);
...
arr[0] = 0;
arr[1] = 1;
...
arr
es una expresión de puntero, no una expresión de matriz, por lo sizeof arr
devolverá el tamaño del tipo de puntero, no del tamaño del bloque de memoria al que apunta (debido a esto, querrá hacer un seguimiento del número de elementos que asignó por separado).
Nota sobre la buena práctica de C: las sentencias Malloc deben ser 'T * var = malloc (sizeof (* var) * NUM);', también se considera una buena práctica para asignar memoria por el que llama, en lugar del destinatario . – Matt