声明数组两次(C99)
我是一个noob,所以我会做这个简短。以下是合法的(C99)?我不想一次存储超过一个数组。我可以创建一个最大需要长度的数组,并且只使用它的一部分,但我宁愿这样做。声明数组两次(C99)
int main(){
double drm[15000];
//do some stuff
double drm[14000];
//do some other stuff
}
不,你不能那样做。他们需要在不同的区块。你可以这样做:
int main(void)
{
{
double drm[15000];
// do some stuff
}
{
double drm[14000];
// do some other stuff
}
}
但是,为什么不只是调用一个函数呢?即使你把它们放在不同的块中,你实际上也不能确定编译器在存储方面做什么。
由于数组与C中的指针强相关,因此您也可以使用动态数组。首先,分配一个新的具有15000个元素的双数组。当你不再需要它时,删除它。然后创建一个包含14 000个元素的新数组。
不要忘记在使用阵列后释放你的堆。人们往往会忘记这一点。此外,你应该检查分配是否成功。
int main(void)
{
double *drm = 0;
drm = (double*)malloc(15000 * sizeof(double));
// do something
free(drm);
drm = (double*)malloc(14000 * sizeof(double));
// do some other stuff
free(drm); // don't forget me
}
但是,我会同意卡尔诺鲁姆:使用函数来代替。
文章被标记为“C99”,而不是“C++”。请更新您的示例以使用'malloc()'和'free()'。 – tomlogic 2012-04-04 18:28:39
何时将'new'添加到C99? – KevinDTimm 2012-04-04 18:29:07
哦,对不起,我可能混合了这两种语言。我稍后会解决这个问题。 – 2012-04-04 18:30:43
你可以使用malloc
和free
(或realloc
如果你不介意保持数据):
#include <stdlib.h>
int main(void)
{
double *drm = (double *)malloc(sizeof(double)*15000);
//do stuff
free(drm);
drm = (double *)malloc(sizeof(double)*14000);
//do other stuff
free(drm);
}
不要施放malloc()的结果 – KevinDTimm 2012-04-04 18:53:36
@KevinDTimm为什么不呢?它没有什么问题。 – 2012-04-04 18:56:14
@JacobAbrahams:没有什么正确的。类型'void *'的表达式可以隐式转换为任何指针类型(除了指向函数的类型)。演员阵容很混乱,根据具体情况可以掩盖错误。例如,在C90中,如果您忘记'#include
谢谢!我没有把它放在我最小的例子中,但它实际上在for(blah = 0; blah
user1313527
2012-04-04 19:26:00
是的 - 一个新的块在任何有'{'的地方开始,并在匹配的'}出现的地方结束。 – 2012-04-04 20:43:44