C ++返回结构数组

时间:2014-04-17 21:17:24

标签: c++ c arrays struct return

好的,所以我有一个这样的结构:

typedef struct name
{
    string thing1;
    string thing2;
    int thing3;
    int thing4;
};

我使用一个运行数据的函数,并将所有内容分配到一个结构数组中,建立内部结构数组。 name structname;

函数运行正常并正确分配内容... structname[i].thing1 structname[i].thing2等会在函数

内完成

我的问题是如何指定函数来返回这个结构数组?我似乎无法使用指针这样做,我已经在网上广泛查找答案。

编辑:首先,首先发布在这里。一直在使用资源,但我不能再次强调学习php,c ++等方面的帮助。所有的一切都是。
我可以使用指针将结构传递给函数,它只是返回一个似乎是问题的结构数组。我的函数被设置为void,所以我一直在使用void函数(struct name& input),但这似乎并没有修改结构。我也尝试将函数用作返回类型,但它不匹配,因为它是一个数组而不是结构。

4 个答案:

答案 0 :(得分:2)

我就是这样做的。

typedef struct name
{
    string thing1;
    string thing2;
    int thing3;
    int thing4;
};

name** getNames(size_t count) {
    size_t i;
    name** names = malloc(count * sizeof(*names));
    for(i = 0; i < count; i++) {
        names[i] = malloc(sizeof(**names));
        names[i]->thing1 = "foobar";
    }
    return names;
}

编辑: 我刚刚注意到这是关于c ++的,所以另一个答案可能更好。

答案 1 :(得分:2)

似乎没有提到这一点。 与在函数func内创建动态内存并返回指向它的指针相比,这种方法的好处是,在我们的情况下,调用者拥有内存(她创建并传递给函数 - 例如{{1}无论如何必须释放它。而在前一种情况下,调用者可能忘记释放函数返回的内存。您也可以在不需要任何东西的情况下使用它(例如,“首次使用”)。

在C:

buff2

您必须小心使用正确的void func(struct name *x, int len) { for(int i = 0; i<len; i++) { // Init each array element x[i] x[i].thing1="text1"; x[i].thing2="text2"; // etc. } } 值,否则您将写入数组。

用法:

len

答案 2 :(得分:1)

在C ++中,您将使用std :: vector:

std::vector<name> f(); // return by value

void f( std::vector<name>& v); // take by reference and assign to vector
                               // inside a function f

在C中,您无法返回数组类型。您可以返回指向数组的指针。两个选项是:在函数f中分配内存或填充预分配的内存(由调用者预先分配)。例如:

1

name* f( int count) {
    name *ret = malloc( count * sizeof( name));
    if( !ret)
        return NULL;

    for( int i = 0; i < count; ++i) 
        // ret[i] = ... initialize  

    return ret;
};

int main() {
    name *p = f(10);
    if( p) {
        // use p
        free( p);  // don't forget
    }

    return 0;
}

2

void f( name* p, int count) {

    if( !p)
        return;

    for( int i = 0; i < count; ++i) 
        // p[i] = ... initialize  
};

int main() {
    name *p = malloc( 10 * sizeof( name));
    f( p, 10);
    free( p);  // don't forget
    return 0;
}

3

void f( struct name p[], int count) {

    if( !p)
        return;

    for( int i = 0; i < count; ++i) 
        // p[i] = ... initialize  
};

int main() {
    name p[10];
    f( p, 10);
    return 0;
}

答案 3 :(得分:0)

确实如此,C ++不推荐返回数组,而是指向它们的指针,但是! C ++允许一切。特别是:

#include "stdafx.h"
#include <iostream>

using namespace std;

typedef struct h{
    int f[2];
};

h my(){
    h a;
    a.f[0]=1;
  a.f[1]=2;
return a;
}

int _tmain(int argc, _TCHAR* argv[])
{
    h j;
    j=my();
    cout << j.f[0];
    system("pause");
    return 0;
}