#include <stdio.h>
void main()
{
int i,numsOfArray;
printf("How many members do you want:(between 1 and 70)?");
scanf("%i",&numsOfArray);
if(numsOfArray < 1 || numsOfArray > 70)
{
printf("Wrong enter!\n");
return;
}
unsigned int array[numsOfArray];
for(i = 0; i < numsOfArray; i++)
array[i] = i;
}
这是一个关于变量长度数组的问题,简单的写了这个程序,用Microsoft visual C++ 6.0 编译,但是编译通不过。
提示如下:
expected constant expression
cannot allocate an array of constant size 0
'array' : unknown size
MS不支持用变量来初始化数组的大小,还是这个编译器不支持,请高手指点
----------------解决方案--------------------------------------------------------
所有的编译器都不支持!!数组的长度是必须指定的;
a[const int];
----------------解决方案--------------------------------------------------------
应该是编译器的问题,有的编译器是支持的,但是不知道哪个,我只有Microsoft Visual
还有复合字面量的问题
http://bbs.bc-cn.net/viewthread.php?tid=146450&extra=&page=1#274661
我的编译器也编译不过
----------------解决方案--------------------------------------------------------
传说C++是有专门的变长数组的
呵呵,我也遇到了这个问题,所以查过,网上有说C99已经支持变长数组了,不过我现在用的编译器似乎还不支持
转载网上的解决方法:example: int *p;int n;(省略键盘输入n相关语句);p=malloc(n*sizeof(int));{你的代码段}free(p//这里不知参数对不对?忘了);
就这样,我测试通过。
很巧吧,其实在谭浩强的链表一章里有这个思想,但是他强调定长数组就是不对!
----------------解决方案--------------------------------------------------------
编译器不会支持你这样做的,这个数组的长度必须在编译的时候就知道,而不是运行的时候才知道。
想要实现变长的数组,那就用malloc(或new)动态的开辟存储空间。
----------------解决方案--------------------------------------------------------
动态的要用链表吧
----------------解决方案--------------------------------------------------------
unsigned int*array = (unsigned int*) malloc(sizeof(unsigned int)*numsOfArray);
或
unsigned int*array = new unsigned int[numsOfArray]
[此贴子已经被作者于2007-8-22 17:39:22编辑过]
----------------解决方案--------------------------------------------------------