没有calloc / malloc的数组的动态内存分配

时间:2013-03-14 12:07:31

标签: c arrays

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

int array['n'];

实际上是:

int array[110];

ascii中的'n'= 110)

只要n&lt; 110这将有效,但我怀疑编码器的意图是什么!

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

int array['n'];编译的原因int array[n];不是因为数组大小需要是constatns。 'n'是常数(110)而n不是。

编辑:许多用户已经注意到这一点,所以我不妨拼写出来,常量数组大小限制是编译器特定的。现代纯c编译器允许它,而c ++编译器则不允许。 VLA一般来说是一个好主意的问题是matter of some debate

答案 2 :(得分: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;
}