假设我想(在 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 在编译时是未知的。
我在某处读到类似“用数组返回结构是一个可怕的想法”之类的东西,而且,嗯……那是我的最后一个想法。
在这种情况下,最佳做法是什么?