c++ - 从 C++ 中的函数返回数组

标签 c++ arrays pointers

我正在尝试从函数返回一个数组:

#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() 函数中,我尝试合并两个数组 ab 中的非负数。

但我的输出是这样的。

1 -1078199700 134514080 -1078199656 -1216637148 134519488 134519297 134519488 8 -1078199700 

而当我尝试在 uni() 函数中打印 c[10] 的值时,它会打印出正确的值。为什么会这样?? 这与堆栈有关吗?因为我已经尝试搜索我的这个错误,我在 stackoverflow 上找到了几个地方,上面写着 do not allocate on stack 但我无法理解。

此外,如果我在全局范围内分配我的数组会变得非常容易,但如果是这种情况,那么所有内容都应在全局范围内声明??为什么我们甚至担心从函数传递指针? (我书里有一章是传授指点的)

最佳答案

诚然,std::vectorstd::array 方法将是可行的方法。

然而,为了解决问题(如果这是一个学校项目,老师给你强制性的“你不能使用 STL”),另一种避免使用指针的方法是将数组包装在里面一个结构并返回该结构的实例。

#include <iostream>

using namespace std;
struct myArray
{
   int array[10];
};

myArray uni(int *a,int *b)
{
    myArray c;
    int i=0;
    while(a[i]!=-1)
    {
        c.array[i]=a[i];
        i++;
    }
    for(;i<10;i++)
        c.array[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};
    myArray c = uni(a,b);
    for(int i=0;i<10;i++)
        cout << c.array[i] << " ";
    cout << "\n";
    return 0;
}

注意结构是按值返回的,这个返回值是在main中赋值的。

你有返回一个实例的值语义,加上结构将被复制,包括它内部的数组。

Live Example

关于c++ - 从 C++ 中的函数返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27410943/

相关文章:

android - Renderscript 分配崩溃

c - 如何索引到 3-D 动态数组?

c - 结构中的双指针

编译器返回错误 "char *(int)' 与 'int ()' 的间接级别不同“即使返回的数据似乎与函数返回类型匹配

c++ - 使用邻接矩阵解决图问题

c++ - 使用 C++ 将 char 数组转换为 int

javascript - 如何在 Javascript 中将值附加到数组中并保持旧值不变?

c - 运行代码时遇到麻烦。代码必须由用户使用另一个函数中的指针删除给定语句中的元音。任何帮助表示赞赏

c++ - 使用套接字编程的c++中的stringstream vs ifstream(ofstream)

java - 在特定布局中添加矩阵