Ja, Sie können, aber Sie müssen Speicher für result
irgendwo zuweisen.
Grundsätzlich können Sie entweder den Speicher innerhalb vec_subtraction
oder außerhalb vec_subtraction
zuweisen, wenn Sie außerhalb zuweisen, können Sie dies statisch oder dynamisch tun.
Wenn Sie vorhaben, nach innen vergeben:
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;
}
und in Haupt:
double *vec;
// ...
vec = vec_subtraction(a, b, n);
// ...
free(vec);
nicht zu free
das Ergebnis des Aufrufs zu vec_subtraction
irgendwann später vergessen.
Wenn Sie vorhaben, zuzuteilen außerhalb Sie in einem Zeiger auf den Speicher übergeben müssen:
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];
}
in Haupt:
// 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).
Kann ich das auch in main machen? Weisen Sie das Array zu: 'double * resoullt = vec_subtraction (a, b, n);' – Devel
Für den Datensatz, die übliche Weise, Vektorrechnung wie folgt zu tun, ist, einen Zeiger dorthin zu übertragen, wo die Ergebnisse gespeichert sind (dh ' void vec_subtraction (char * a, Zeichen * b, double * c, int n); '). Dies ermöglicht dem Aufrufer, Puffer wiederzuverwenden und manchmal denselben Puffer sowohl für das Ergebnis als auch für eine Eingabe zu verwenden. Wir hatten ein Projekt mit seltsamen Fehlern, weil 'malloc()' in der Ausführungszeit zu wenig deterministisch war. –