我试图从函数返回数组:
#include <iostream>
using namespace std;
int* uni(int *a,int *b)
{
int c[10];
int i=0;
while(a[i]!=-1)
{
c[i]=a[i];
i++;
}
for(;i<10;i++)
c[i]=b[i-5];
return c;
}
int main()
{
int a[10]={1,3,3,8,4,-1,-1,-1,-1,-1};
int b[5]={1,3,4,3,0};
int *c=uni(a,b);
for(int i=0;i<10;i++)
cout<<c[i]<<" ";
cout<<"\n";
return 0;
}
我从main()我的uni()函数传递两个数组。在那里,我创建了一个新数组c[10],返回到main()。在我的uni()函数中,我尝试合并两个数组a和中的非负数b。
但是我得到的输出是这样的。
1 -1078199700 134514080 -1078199656 -1216637148 134519488 134519297 134519488 8 -1078199700
而当我尝试打印函数中的值时c[10],uni()它将打印正确的值。为什么会这样?这和堆栈有关吗?因为我已经尝试搜索我的这个错误,所以我在stackoverflow上找到了一些地方,上面写着这个,do not allocate on stack但是我听不懂。
此外,如果我在全局范围内分配数组,这将变得非常容易,但是如果是这种情况,那么所有内容都应全局声明?我们为什么还要担心从函数传递指针呢?(我的书中有一章用于传递指针)
冉冉说
月关宝盒
明月笑刀无情
相关分类