假設我想寫(在C99)以下功能:Ç - 未知大小的數組回報
NAME: primes
INPUT: an integer n > 0
OUTPUT: int array filled with the prime numbers in range [2, n]
如何從我的函數返回這樣的一個數組?那可能嗎?
注意,我不所需號碼分配的n * sizeof(int)
陣列,我會用0(複合)和1(質數)填寫。
我不能只返回一個指向數組,因爲主叫方沒有辦法知道數組有多長:
int * primes(int n)
{
int * arr = malloc(n * sizeof(int));
// do stuff
return arr;
}
int main(void)
{
int * arr = primes(100);
printf("%lu \n", sizeof arr); // prints 8
}
,我不能更改簽名是這樣的:
int (*primes(int n))[LENGTH]
因爲在編譯時LENGTH是未知的。
我讀的地方有點像「與陣列返回一個結構是一個可怕的想法」,並且,嗯......那是我最後的想法。
這種情況下的最佳做法是什麼?
你可以返回一個分配的指針,因爲你顯示,這不是一個問題。但是,'sizeof(arr)'將是指針的大小,而不是數組的長度。所以你會得到8你在一臺64位機器上。 – lurker
@mbratch這就是問題所在。如果調用者想要迭代素數會怎麼樣? 'for(int i = 0; i ?????; i ++)' – Haile
顯示一些代碼,您希望迭代如何工作。您需要以某種方式定義'??????'。用戶如何決定這個數字? – lurker