我不理解以下程序中的数组声明:
int main(){
int n;
printf("How many numbers?");
scanf(" %d",&n);
int array['n'];
for(int i = 0; i < n; i++)
{
scanf(" %d",&array[i]);
}
for(int i = 0; i < n; i++)
{
printf(" %d\n",*(array +i));
}
getch();
return 0;
}
最佳答案
好吧,''语法意味着用其ascii值替换。所以
int array['n'];
实际上是:
int array[110];
(因为ascii中的'n'= 110)
所以只要n
这里的意图很可能是
int array[n];
。缺少malloc
表示在堆栈而不是堆上创建数组。 (进一步阅读:memory managment in c)。int array['n'];
进行编译而int array[n];
不能进行编译的原因是因为数组大小需要进行转换。 n是常数(110),而n不是。编辑:许多用户已经注意到了这一点,所以我不妨将其说明出来,常量数组大小限制是特定于编译器的。现代的纯c编译器允许这样做,而c ++编译器则不允许。一般而言,VLA是个好主意的问题是matter of some debate
关于c - 没有calloc/malloc的数组的动态内存分配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15408856/