为什么我没有得到正确的输出?
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()返回数组的地址但我仍然得到垃圾值。
哇 – 激进的downvoting! 给新人一个机会!
答案是“范围”。 如果使用gcc编译,则会收到一个非常明显的警告:
C:\tmp>gcc test.c test.c: In function `func': test.c:22: warning: function returns address of local variable
当函数退出并清除其内存分配时,局部变量将丢失。
如果要从函数返回数组,则必须对其进行malloc
以创建非本地内存分配,然后返回指针。
您将返回指向局部变量的指针,这会导致未定义的行为。
处理返回数组的函数的最常用方法是从调用者传入数组,例如代码的固定版本:
void func(int arr[]); int main() { int arr[10]; func(arr); for (int i = 0; i < 10; i++) printf("%d ", arr[i]); return 0; } void func(int arr[]) { for (int i = 0; i < 10; i++) arr[i] = i + 1; }