gpt4 book ai didi

c - 局部结构和指针

转载 作者:行者123 更新时间:2023-11-30 17:57:01 24 4
gpt4 key购买 nike

我有一个函数,它接受一个结构作为参数,例如:

add_new_structure(structure s);

然后将其存储在里面结构structure_list[200];

问题:

1. 当我想使用该结构时,我有一个类似

的函数
structure *getStructure(int id)
{
return &structure_list[id];
}

如果我添加一个像这样的结构,它会起作用吗:

void init()
{
structure test;
memset(&test,0,sizeof(structure));
add_new_structure(test);
}

然后从另一个函数调用 getStructure?像这样:

void anotherFunction()
{
structure *got_test = getStructure(0);
}

因为我记得我不能拥有局部变量,然后从另一个函数调用它,对吗?

2.这样存储是否更好?

add_new_struct()参数更改为结构体*s

然后将其存储在里面struct *struct_list[200]; 通过调用 add_new_struct(&test);

<强>3。哪一个更好?或者什么是正确的方法?

最佳答案

第一种方法,即直接将实例作为参数传递,是有效的。因为调用函数时会复制整个实例。您存储的是原始结构实例的副本。

但是,您无法传递和存储指向局部变量的指针。这种情况下就会出现您上面提到的问题。

恕我直言,上述方法都不正确。第一种方法在向函数传递参数时会引入太多开销。而第二个则无法达到你想要的效果。您最好使用malloc/calloc动态分配内存并将指针存储在数组中。不要忘记在使用结束时释放对象,以防内存泄漏。像这样:

void init()
{
structure *test = NULL;
test = (structure *) calloc(1, sizeof(structure));
add_new_structure(test);
}

void add_new_structure(structure *s);

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

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