Sí, puede, pero necesita asignar memoria para result
en alguna parte.
Básicamente, puede asignar la memoria en el interior vec_subtraction
o en el exterior vec_subtraction
, si asigna fuera, puede hacerlo estática o dinámicamente.
Si usted va a destinar el interior:
double *vec_subtraction (char *a, char *b, int n) {
double *result = malloc(sizeof(double)*n);
int i;
for(i=0; i<n; i++)
result[i] = a[i]-b[i];
return result;
}
y en el principal:
double *vec;
// ...
vec = vec_subtraction(a, b, n);
// ...
free(vec);
No se olvide de free
el resultado de la llamada a vec_subtraction
algún tiempo después.
Si usted va a destinar fuera de lo necesario para pasar un puntero a la memoria:
void vec_subtraction (char *a, char *b, int n, double *result) {
int i;
for(i=0; i<n; i++)
result[i] = a[i]-b[i];
}
en el principal:
// choose one of:
// double *vec = malloc(sizeof(double)*n);
// double vec[10]; // where 10= n.
vec_subtraction(a, b, n, vec);
// if you used *vec = malloc... remember to call free(vec).
¿Puedo hacer esto también en main? Asignar la matriz: 'double * resoult = vec_subtraction (a, b, n);' – Devel
Para el registro, la forma habitual de hacer cálculos vectorizados como esto es pasar un puntero a donde se almacenan los resultados (es decir, ' void vec_subtraction (char * a, char * b, doble * c, int n); '). Esto permite que el que llama reutilice los búferes y, a veces, use el mismo búfer tanto para el resultado como para una entrada. Tuvimos un proyecto que tuvo fallas extrañas porque 'malloc()' era demasiado no determinista en el tiempo de ejecución. –