C 存储结构的动态数组的长度

C 存储结构的动态数组的长度,c,C,有人能帮我吗?假设我有以下结构: 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(){ ..

有人能帮我吗?假设我有以下结构:

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;
}
假设在函数运行时动态生成数组的长度,返回数组长度的最佳方法是什么


我希望我说的有道理。提前感谢。

您可以将长度作为函数的引用传递,并让函数填写:

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);

    /* ... */
}

您可以将长度作为引用传递给函数,并让函数填写:

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);

    /* ... */
}
和使用

MyArray *new_array;
size_t lenght;

lenght = function(new_array);
和使用

MyArray *new_array;
size_t lenght;

lenght = function(new_array);

您可以返回包含长度和分配数组指针的结构或指向结构的指针,也可以传入指向变量的指针以接收长度

int length;

mystruct **new_mystruct = function(&length);

我更喜欢stuct方法。

您可以返回一个包含长度和分配数组指针的结构或指向结构的指针,也可以传入一个指向变量的指针以接收长度

int length;

mystruct **new_mystruct = function(&length);
我更喜欢stuct方法。

生成包装结构:

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);
}
您还可以创建一个使用memcpy创建副本的复制数组函数。

生成包装结构:

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);
}

您还可以创建一个使用memcpy创建副本的copy\u数组函数。

您声明的是一个双指针,但仅为mystruct分配。删除其中一个星号。只需在最后一个元素中输入NULL。然后你可以计算一下你有多少元素。链表似乎是一个选项。你声明了一个双指针,但只为mystruct分配。删除其中一个星号。只需在最后一个元素中输入NULL。然后你可以计算一下你有多少元素。看起来链表是一个选项。这是我用的方法,因为它是最简单的。这是我用的方法,因为它是最简单的。