c语言 结构体赋值_C语言结构体那些事儿-------诡异的结构体返回

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

...

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

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

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

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

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

“show me your code”

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

做个示例代码如下所示

3f937794003e71e9b5729c99fda15cbc.png

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

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

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

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

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

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

“。。。”

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

代码如下图

3f7f8a243eef44d3dfd4b935c9b04820.png

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值