龙空技术网

C语言结构体那些事儿-------诡异的结构体返回

皇室大西瓜 193

前言:

如今姐妹们对“函数返回结构体并直接赋值给结构体变量”大约比较关切,看官们都需要分析一些“函数返回结构体并直接赋值给结构体变量”的相关知识。那么小编同时在网摘上汇集了一些对于“函数返回结构体并直接赋值给结构体变量””的相关知识,希望同学们能喜欢,我们一起来了解一下吧!

今天给新来的小伙子分配一个任务,把之前测试完成的一个读取电量并完成转换动作的功能模块封装成一个函数,小伙子美滋滋接了任务就干活去了。

...

两个小时后,小伙子愁眉苦脸的过来了。

“我的函数返回的值怎么总是不对呢,函数里面还是对的,但是返回后就错了。”

“你返回的什么值,怎么做的”

“我在函数里定义了一个结构体,把要返回的值放进了一个结构体里面,函数返回的是这个结构体。”

这时我基本上心里有数了,这个坑年轻的时候也跳过,那时候咬死了编译器有问题,当时还是naive啊。

“show me your code”

果然如他所说,函数里面定义了一个结构体,然后返回的是这个结构体,但是返回的结构体里面的一个指针出错了,总是得到一个奇怪的值。

做个示例代码如下所示

这个结构体返回后,里面的成员值总是不对,小伙子有点摸不着头脑了。

“知道你定义的结构体stu保存在哪里吗?”

“函数里面啊”,小伙子果然很天真。

“。。。好吧,其实这个结构体使用的是函数的栈空间,也就是说函数返回后,这块栈空间是要被释放的,一旦释放掉,其他的任务就可以使用这块区域,里面存放的数据就不能保证正确了”。

“那我该怎么做才能返回结构体呢,定义一个全局结构体变量?”

“这个方式行倒是行,但是不优雅”,该装的B还是不能放过的。

“。。。”

给整个结构体动态分配一块内存区域就可以解决这个问题,但切记,使用完后记得释放内存,否则会造成内存泄漏。

代码如下图

还有一种方式,就是传进去一个结构体指针作为形参,这样对结构体的赋值操作就没问题了。

同学们还有其他方法吗,欢迎关注哦

标签: #函数返回结构体并直接赋值给结构体变量 #结构体返回值 #函数返回一个结构体 #c语言返回一个结构体 #结构体返回值用什么接受