gpt4 book ai didi

c - 双重间接寻址和传递给函数的结构

转载 作者:太空宇宙 更新时间:2023-11-04 00:56:12 25 4
gpt4 key购买 nike

我很好奇为什么这段代码有效:

typedef struct test_struct {
int id;
} test_struct;

void test_func(test_struct ** my_struct)
{
test_struct my_test_struct;
my_test_struct.id=267;

*my_struct = &my_test_struct;
}

int main ()
{
test_struct * main_struct;
test_func(&main_struct);
printf("%d\n",main_struct->id);
}

这行得通,但是指向函数局部变量的内存地址是一个很大的禁忌,对吧?

但如果我使用结构指针和 malloc,那将是正确的方法,对吧?

void test_func(test_struct ** my_struct)
{
test_struct *my_test_struct;
my_test_struct = malloc(sizeof(test_struct));
my_test_struct->id=267;

*my_struct = my_test_struct;
}

int main ()
{
test_struct * main_struct;
test_func(&main_struct);
printf("%d\n",main_struct->id);
}

最佳答案

第一个版本运行只是运气不好。尝试在 test_func 返回后但在调用 printf 之前随机调用其他内容。

第二个版本是正确的。当然,您没有释放堆内存,但这在程序结束时是否重要是一个有争议的问题。

关于c - 双重间接寻址和传递给函数的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2548800/

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