任何人都可以帮我吗?假设我有以下结构:
typedef struct mystruct{
int data1;
int data2;
}mystruct;
我使用以下代码创建了一个struct数组:
main(void) {
mystruct **new_mystruct = function();
... need to know the length of new_mystruct here ...
}
mystruct **function(){
... code to determine length of array here ...
mystruct **new_mystruct= malloc(length_of_array * sizeof(mystruct));
... code to fill array here ...
return new_mystruct;
}
返回数组长度的最佳方法是什么,假设在函数运行期间动态生成了length_of_array?
我希望我有意义。提前谢谢。
答案 0 :(得分:2)
您可以将长度作为函数的引用传递,并将函数填入:
mystruct *function(size_t *size)
{
/* ... */
mystruct *new_mystruct = malloc(length_of_array * sizeof(mystruct))
*size = length_of_array;
/* ... */
return new_mystruct;
}
int main(void)
{
/* ... */
size_t size;
mystruct *new_mystruct = function(&size);
/* ... */
}
答案 1 :(得分:2)
制作包装器结构:
typedef struct_array_
{
mystruct * p;
size_t size;
} struct_array;
您的创建功能可以按值返回:
struct_array create_array(size_t n)
{
mystruct * p = malloc(n * sizeof *p);
struct_array result = { p, n };
return result;
}
你应该做一个匹配的清理功能:
void destroy_array(struct_array a)
{
free(a.p);
}
您还可以制作使用copy_array
创建副本的memcpy
函数。
答案 2 :(得分:0)
size_t function(MyStruct *mystruct)
{
/*...*/
mystruct = malloc(length_of_array * sizeof(MyStruct));
/*...*/
return length_of_array;
}
并使用
MyArray *new_array;
size_t lenght;
lenght = function(new_array);
答案 3 :(得分:0)
您可以返回包含长度和指向已分配数组的指针的struct(或指向struct的指针),也可以传入指向变量的指针以接收长度。
int length;
mystruct **new_mystruct = function(&length);
我更喜欢这种方法。