我不理解以下程序中的数组声明:

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/

10-10 21:31
查看更多