C:动态声明数组大小
我在函数中有以下声明C:动态声明数组大小,c,C,我在函数中有以下声明 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;
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;
}
它仍然不工作,我的意思是程序没有崩溃,它计算的值不正确。发生了什么?谢谢。通过使用malloc(或calloc)在堆上进行分配,可以获得一个动态大小的数组 替换
int f[20000];
与
通过使用malloc(或calloc)在堆上进行分配,可以获得一个动态大小的数组 替换
int f[20000];
与
区别在于全局变量保证初始化为
0
(除非初始化为其他值)。但是局部变量是垃圾,除非你初始化它们。所以问题是变量b
在第二个代码段中开始时是垃圾
在原始代码中:
int a=10000,b;
int main(void)
{
}
a
将以值10000
开头,因为您已初始化它;b
将以0
开头,因为它是一个未初始化的全局变量
在更改后的代码中:
int main(void)
{
int a=10000,b;
}
a
将以值10000
开始,因为您初始化了它,b
将以某个随机值开始(例如0x5315fe
),因为它是一个未初始化的局部变量。区别在于全局变量保证被初始化为0
(除非初始化为其他值)。但是局部变量是垃圾,除非您初始化它们。所以问题是变量b
在第二个代码段中开始时是垃圾
在原始代码中:
int a=10000,b;
int main(void)
{
}
a
将以值10000
开头,因为您已初始化它;b
将以0
开头,因为它是一个未初始化的全局变量
在更改后的代码中:
int main(void)
{
int a=10000,b;
}
a
将以值10000
开头,因为您已初始化它;b
将以某个随机值开头(例如0x5315fe
),因为它是未初始化的局部变量。替换int f[2000]
与
int*f=新int[2000]
然后将数组用作f[0]=1,f[1]=2等
完成后,使用delete[]f释放内存
数组大小可以由变量分配
例如。
int x=2000;
f=新整数[x];替换整数f[2000]
与
int*f=新int[2000]
然后将数组用作f[0]=1,f[1]=2等
完成后,使用delete[]f释放内存
数组大小可以由变量分配
例如。
int x=2000;
f=new int[x];有两种方法可以实现您想要的
也就是说,正如@user3386109所指出的,第二个代码片段中的问题是使用未初始化的变量
b
。您可能希望在使用局部变量的值之前显式初始化它们。有两种方法可以实现您想要的
也就是说,正如@user3386109所指出的,您的第二个代码段中的问题是使用未初始化的变量
b
。您可能希望在使用局部变量的值之前显式初始化它们。请定义它仍然不起作用。
精度值是多少。您在哪里读取用户精度值。堆栈上的20000*sizeof int数组(80000字节)是一个非常糟糕的主意。可能会导致堆栈溢出。建议:int-arraySize=20000;int-pf=malloc(arraysizeof int);(然后检查'pf'不包含NULL)(确保使用:'free(pf)使用数组时,此代码不会干净地编译。原因有两个:未使用参数argc和argv。建议使用“int main(void)”“7/2”正在执行整数除法,因此结果将始终为“3”而不是3.5。请定义它仍然不起作用精度值是多少。您在哪里读取用户精度值。20000*sizeof int数组(80000字节)在堆栈上执行此操作是一个非常糟糕的主意。可能会导致堆栈溢出。建议:int arraySize=20000;int pf=malloc(arraySizesizeof int);(然后检查'pf'不包含NULL)(请确保使用:'free(pf)使用数组时,此代码不会干净地编译。原因有两个:未使用参数argc和argv。建议使用“int main(void)”“7/2”正在执行整数除法,因此结果将始终是“3”而不是“3.5”。这个问题被标记为c
,AFAIK,new
不是c
。这个问题被标记为c
,AFAIK,new
不是c
。你救了我的命,谢谢。问题不是“我的代码出了什么问题”,(其中有很多错误)。问题是“如何动态调整数组大小?”问题本身有两种非常好的动态分配数组的方法,但从OP的角度来看,这两种方法似乎都不起作用。因此问题变成了,“为什么这段代码不起作用?”你救了我的命,谢谢。问题不是“我的代码出了什么问题>”(其中有很多错误)。问题是“如何动态调整数组大小?”问题本身有两种非常好的动态分配数组的方法,但从OP的角度来看,这两种方法似乎都不起作用。因此,问题变成了:“为什么这段代码不起作用?”