2030|3

11

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于返回值为指针的函数 [复制链接]

本帖最后由 o景天o 于 2020-4-15 11:45 编辑

本人初学者,目前在学习指针和函数部分的关联内容,写了一段返回值为指针的函数。

代码如下:

typedef u8 *pu8;

uint8_t *sum(uint8_t value, uint8_t data)
{
    pu8 sum;
    uint8_t a = 0;
    printf("value:%d, data:%d\n", value, data);
    a = value + data + data;
    sum = &a;
    printf("&a:%p, a:%d, sum:%p, *sum:%d\n", &a, a, sum, *sum);
    return sum;
}

 

main()

{

    system_init();

    while(1)

    {

        printf("sum:%p, *sum:%d \n", sum(2,3), *sum(2,3));

    }

}

 

while(1)里面有单独的一个printf函数,间隔打印输出,目前设置的打印内容就是while(1)里的这个printf。

我编译后下载到单片机里,运行后串口输出为:

value:2, data:3
&a:17f5, a:8, sum:17f5,* sum:8

value:2, data:3
&a:17f5, a:8, sum:17f5, *sum:8
sum17f5, *sum:111

 

为什么最后*sum的结果是111而不是8?

此帖出自编程基础论坛

最新回复

sum指向a,但是a在函数调用之后就是不存在的变量了(之前a所占内存的被回收),所以sum指向的是不确定的内容(虽然地址没变,但内容已不可控),还好返回的结果非你预料,如果返回了8,更会让你误入歧途;在C中,是绝对不要返回指向局部变量的指针。   详情 回复 发表于 2020-4-15 11:57
点赞 关注
 

回复
举报

11

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
本帖最后由 o景天o 于 2020-4-15 11:47 编辑

求助大佬

此帖出自编程基础论坛
 
 
 

回复

6040

帖子

202

TA的资源

版主

板凳
 

sum指向a,但是a在函数调用之后就是不存在的变量了(之前a所占内存的被回收),所以sum指向的是不确定的内容(虽然地址没变,但内容已不可控),还好返回的结果非你预料,如果返回了8,更会让你误入歧途;在C中,是绝对不要返回指向局部变量的指针。

此帖出自编程基础论坛

点评

多谢解惑,我之前也有意识到了可能是a的问题,但是修改后发现还是111,也就没有再细致思考了。现在重新写了之后,问题已经解决了。  详情 回复 发表于 2020-4-15 13:40
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

4
 
lcofjp 发表于 2020-4-15 11:57 sum指向a,但是a在函数调用之后就是不存在的变量了(之前a所占内存的被回收),所以sum指向的是不确定的内 ...

多谢解惑,我之前也有意识到了可能是a的问题,但是修改后发现还是111,也就没有再细致思考了。现在重新写了之后,问题已经解决了。

此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表