int*func();
int main()
{
int i;
int *ptr;
ptr=func();
for(i=0;i<10;i++)
{
printf("%d ",*ptr);
ptr++;
}
}
int* func()
{
int arr[10];
int i;
for( i=0;i<10;i++)
arr[i]=i+1;
return arr;
}
为什么我没有得到 1,2,3,4,5,6,7,8,9,10 的输出?
我从 func() 返回数组的地址,但是
我仍然得到垃圾值。
哇——激进的否决!各位,给新人一个机会吧!
答案是“范围”。如果你用 gcc 编译,你会得到一个非常明显的警告:
C:\tmp>gcc test.c
test.c: In function `func':
test.c:22: warning: function returns address of local variable
当函数退出并且其内存分配被清理时,局部变量就会丢失。
如果你想从函数返回一个数组,你必须malloc
它创建一个非本地内存分配,然后返回指针。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)