是的,你可以,但你需要爲result
某處分配內存。
基本上,您可以在vec_subtraction
之內或在vec_subtraction
之外分配內存,如果您在外部分配,則可以靜態或動態地進行此操作。
如果你打算到裏面分配:
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;
}
,並在主:
double *vec;
// ...
vec = vec_subtraction(a, b, n);
// ...
free(vec);
不要忘記free
調用vec_subtraction
的結果晚些時候。
如果你要分配之外,你需要在一個指針內存經過:
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];
}
主
:
// 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).
我也可以在main中做到這一點嗎?分配數組: 'double * resoult = vec_subtraction(a,b,n);' – Devel 2010-01-22 22:01:09
對於記錄來說,像這樣做矢量數學的通常方法是將指針傳遞到結果存儲的任何地方(即' void vec_subtraction(char * a,char * b,double * c,int n);')。這允許調用者重用緩衝區,並且有時對結果和一個輸入使用相同的緩衝區。我們有一個奇怪的失敗項目,因爲'malloc()'在執行時間上太不確定了。 – 2010-01-22 22:46:53