-1

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

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;
}
4

3 回答 3

1

替换int array['n']int array[n]并确保您使用 C 编译器来编译代码,它会正常工作。具有非常量大小的自动分配数组称为VLA,14 年前在 C99 中引入。

于 2013-03-14T12:27:08.680 回答
0

好吧,'' 语法意味着用它的 ascii 值替换。所以

int array['n'];

实际上是:

int array[110];

( ascii中的 'n'=110 )

所以只要 n < 110 这将起作用,但我怀疑这就是编码器的意图!

可能int array[n];是这里的意图。缺少malloc意味着数组是在堆栈上创建的,而不是在堆上。(进一步阅读:c 中的内存管理)。

int array['n'];编译而int array[n];没有编译的原因是因为数组大小需要是常量。'n' 是一个常数 (110),而 n 不是。

编辑:许多用户已经注意到这一点,所以我不妨把它拼出来,常量数组大小限制是编译器特定的。现代纯 c 编译器允许它,而 c++ 编译器则不允许。VLA是一个好主意的问题总体上是一个有争议的问题

于 2013-03-14T12:10:51.353 回答
0
#include <stdio.h>
#include <stdlib.h>

// working in Dev-C++
int main() {
int a,i;

printf("enter size\n");
scanf("%d",&a);
int arr[a];
for(i=0;i<a;i++)
{
    scanf("%d",&arr[i]);
}
for(i=0;i<a;i++)
{
    printf("%d",arr[i]);
}
return 0;
}
于 2015-11-29T17:06:47.367 回答