我正在尝试从一个函数返回一个数组:
我将两个数组从
当我尝试在
如果我全局分配数组,那么一切都将变得非常容易,但如果这样的话,所有东西都必须全局声明吗?我们为什么要担心从函数传递指针?(我在书中有一个章节讲解传递指针)
#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
当我尝试在
uni()
函数中打印c[10]
的值时,它会打印出正确的值。这是为什么呢?难道与堆栈有关吗?因为我尝试搜索我的错误,我在stackoverflow上找到了一些地方,上面说不要在堆栈上分配,但我无法理解它。如果我全局分配数组,那么一切都将变得非常容易,但如果这样的话,所有东西都必须全局声明吗?我们为什么要担心从函数传递指针?(我在书中有一个章节讲解传递指针)
std::array
或std::vector
。来回传递指向C风格数组的指针非常混乱且容易出错。 - tadman