2013-10-31 69 views

回答

0

當函數期望double []它相當於double *,因爲數組衰減爲指針。但是請注意,由於sizeof將返回指針的大小,因此您的函數無法找到該數組的大小,這是沒有辦法的。你應該通過的大小以及:

void foo(double x[], int size) { 
    ... 
} 

int main(void) { 
    const int N = 10000; 
    double *x = malloc(sizeof(double) * N); 
    foo(x, N); 
    free(x); // don't forget to clean up 
    return 0; 
} 
+0

謝謝。接口中的函數也有數組大小的參數,我只是爲了清晰起見而忽略了這一點。 –

+0

@DavidPfau:啊,好的:)在這種情況下,只需使用'malloc'動態分配你的數組,然後將它傳遞給這個函數而不用擔心。 – LihO

1

在函數簽名中,double x[]相當於double *x。你總是傳遞一個指針,一個指針並不在乎它是指向堆上的對象還是指向堆棧上的對象。只需以適當的方式分配陣列(例如,如果堆棧太大,則使用malloc),並將結果指針傳遞給foo

0

當你傳遞一個數組到一個函數時,它退化成一個指向基類型的指針,指向第一個元素。

它從不傳遞堆棧上的所有值。

1

您的功能將正常工作。數組參數不會複製到堆棧,它們始終作爲指針傳遞。您寫入的函數聲明實際上等同於:

void foo(double *x); 
1

使用malloc在堆上分配數組。問題不在於該功能。相反,問題在於你分配你傳遞給函數的數組。只要你在堆上分配數組,你不會溢出你的堆棧。

+0

不是他問的答案。 – Barmar

+0

@barmer你確定嗎? –

+0

我猜我們會發現他是否接受答案。 – Barmar