1004|3

13

帖子

0

资源

一粒金砂(中级)

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

本帖最后由 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?

此帖出自编程基础论坛

回复

13

帖子

0

资源

一粒金砂(中级)

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

求助大佬


回复

6085

帖子

206

资源

版主

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

点评

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

EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,上班摸鱼场,释放压力好地方!商家勿入!加群暗号:喵


回复

13

帖子

0

资源

一粒金砂(中级)

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

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


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

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    关闭
    站长推荐上一条 1/10 下一条

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

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

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

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