为什么我没有得到正确的输出?

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