好的,所以我有一个这样的结构:
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),但这似乎并没有修改结构。我也尝试将函数用作返回类型,但它不匹配,因为它是一个数组而不是结构。
答案 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;
}