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楼太强了 解释的太生动了
#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楼太强了 解释的太生动了