C语言函数返回数组疑惑解决思路

C语言函数返回数组疑惑
#include <stdio.h>
#include <string.h>

/*返回数组的函数*/
int *ArrayReturn(void);


int main()
{
  int array[20] = {0};
  int i;

  array = ArrayReturn();

  for (i = 0; i < 20; i++)
  {
  printf("%d\n", array[i]);
  }

  getch();
}


int *ArrayReturn(void)
{
  int array[20];
  int *p = array;
  int i;

  for (i = 0; i < 20; i++)
  {
  array[i] = i;
  }

  return p;
}


编译时,红色标记行出错了。返回数组函数一直很纠结啊

------解决方案--------------------
函数中的数组是定义的变量,函数结束的时候,这个数组会被回收。
如果需要,就用malloc,这样动态分配的空间是在堆上,只有你free掉(或者程序运行结束)的时候才会被回收。
------解决方案--------------------
不能返回局部变量的引用,在很多书里都有提到特别是Effective C++里面。
------解决方案--------------------
7楼太强了 解释的太生动了