gpt4 book ai didi

c - 返回结构指针

转载 作者:太空狗 更新时间:2023-10-29 16:25:34 24 4
gpt4 key购买 nike

假设我有以下返回指针的结构和函数:

typedef struct {
int num;
void *nums;
int size;
} Mystruct;

Mystruct *mystruct(int num, int size)
{
//Is the following correct? Is there a more efficient way?
Mystruct mystruct;
mystruct.num = num;
mystruct.size = size;
mystruct.nums = malloc(num*sizeof(size));
Mystruct *my;
*my = mystruct;
return my;
}

我想使用上述函数定义任何 Mystruct 指针。我应该声明一个 Mystruct 变量,定义 Mystruct 的属性,为其分配一个指针并返回指针,还是立即通过指针定义一个 mystruct 属性的属性?

最佳答案

Should I declare a Mystruct variable, define the properties of Mystruct, assign a pointer to it, and return the pointer

绝对不是,因为函数中定义的变量(在“auto”存储类中)将随着函数退出而消失,并且您将返回一个悬空指针。

您可以接受一个指向Mystruct 的指针(调用者负责分配它)并填充它;或者,您可以使用 malloc 创建一个新的(调用者有责任在完成后释放它)。第二个选项至少可以让你保留你似乎热衷的函数签名:

Mystruct *mystruct(int num, int size)
{
Mystruct *p = malloc(sizeof(MyStruct));
....
return p;
}

但它通常是次要的——因为调用者无论如何都必须承担责任,所以不妨选择第一个选项并可能获得性能(如果调用者可以使用自动类实例,因为它知道使用范围是有界的)。

关于c - 返回结构指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2702928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com