c - 如何在 C 中为素数筛算法设置可变长度数组?
问题描述
我对C完全陌生,过去只是真正有过Python的经验,所以请原谅我在这里的无知。
我正在尝试在 C 中实现 Eratosthenes 的素筛算法。该算法递归地丢弃给定数字的所有倍数,直到找到您想知道的最后一个数字。具体来说,程序将有一个输入n,并将输出所有小于n的素数。
为了实现这一点,我想创建一个长度为n的数组并递归循环这个数组,丢弃我不再关心的整数(通过将它们更改为 0)。
然而,我发现的问题是 c 不允许可变长度的数组。我以为我通过这个技巧比这条规则更聪明了一点:
void Sieve(int n) {
int prime[n+1];
}
但遗憾的是,即使是赋予函数的变量也不行。
因此我的问题是:如何在 C 中启动这样的数组?
解决方案
您可以使用动态内存分配:
int* prime;
prime = malloc(sizeof(int)*n);
然后将其用作常规数组,例如prime[n-1]
推荐阅读
- variables - 必须声明标量变量“@postScript”
- microservices - WebTestClient Junit 测试用例抛出 415 UNSUPPORTED_MEDIA_TYPE
- python - Python写入文件键盘记录错误
- c - 调用 pthread_barrier_wait() 失败
- excel - Excel sheet.range().Value 持有错误的数据
- javascript - jquery ajax 发布并忘记并重定向
- javascript - 使用递归函数查找数组的最小数量
- c# - 如何为仅接受文件路径的正在测试的方法提供内存文件?
- arduino - ESP8266 mqtt 消息未发布
- javascript - javascript对象空白属性值在asp.net web api中转换为null