我在函数
中有以下声明int f[20000]
我希望数字20000是动态的,我如何在代码中声明这样的数组?
更具体地说,我有以下代码来计算PI。
#include <stdlib.h>
#include <stdio.h>
#define BITS 2000
int a=10000,b,c=BITS*7/2,d,e,f[BITS*7/2+1],g;
int main()
{
for(;b-c;)
f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
//getchar();
return 0;
}
我改为
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
//
// .... omit some lines here
// read bits from user input at runtime
// say precision = 200
//
int a=10000,b,c=precision *7/2,d,e,f[precision *7/2+1],g;
for(;b-c;)
f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
//getchar();
return 0;
}
它没有用,我用Google搜索然后改为
int a=10000,b,c=precision *7/2,d,e,g;
int *f=calloc(precision *7/2+1, sizeof(int));
它仍然不起作用,我的意思是程序没有崩溃,它计算的值不正确。怎么了?谢谢。
答案 0 :(得分:3)
通过使用malloc(或calloc)在堆上分配,可以获得动态大小的数组。
替换
int f[20000];
与
int *f = (int *) malloc(20000 * sizeof(int) );
答案 1 :(得分:3)
有两种方法可以达到你想要的效果。
malloc()
/calloc()
c99
)如上所述,正如 @ user3386109 所指出的,第二个代码段中的问题是使用未启动的变量b
。您可能希望在使用其值之前显式初始化局部变量。
答案 2 :(得分:1)
不同之处在于保证全局变量初始化为0
(除非初始化为其他值)。但是局部变量是垃圾,除非你初始化它们。所以问题是变量b
在第二个片段中以垃圾开头。
在原始代码中:
int a=10000,b;
int main(void)
{
}
a
将以值10000
开头,因为您已将其初始化,b
将以0
开头,因为它是未初始化的全局变量
在更改的代码中:
int main(void)
{
int a=10000,b;
}
a
将以值10000
开头,因为您已将其初始化,b
将以某个随机值(例如0x5315fe
)开头,因为它是未初始化的本地变量。
答案 3 :(得分:-1)
替换int f [2000]
与
int * f = new int [2000];
然后使用数组f [0] = 1,f [1] = 2等...
当使用delete [] f;
完成释放内存时数组大小可以由变量
分配例如。 int x = 2000; f = new int [x];