游穆族人 2017-05-21 02:39 采纳率: 100%
浏览 1000
已采纳

C语言一个结构体指针的问题

我用一个子函数初始化了一个结构体并返回结构体的地址,但是却发现在主函数中输出的num和str字符串和子函数中输出的不一样,主函数中输出的内容更像是一些乱码,但是两个函数中的地址是一致的,这是哪儿出现什么问题了吗?

代码如下,大家可以测试一下(这个代码并没有实际意义,就是在练习结构体时候瞎写的)

 #include <stdio.h>

struct Test
{
    int num;
    char str[20];
};

struct Test * function();

int main()
{
    struct Test *p = function();

    printf("address : %p\n", p);

    printf("num = %d\n", p->num);
    printf("str = %s\n", p->str);
}

struct Test * function()
{

    struct Test test =
    {
        10,
        "hello world"
    };

    struct Test *p = &test;

    printf("num = %d\n", p->num);
    printf("str = %s\n", p->str);

    printf("address : %p\n", p);

    return p;
}

附上运行结果图:
第一行是子函数中的num
第二行是子函数中的str
第三行是子函数中返回的地址
第四行是主函数中接收到的地址
第五行是主函数中的num
第六行是主函数中的str
图片说明

  • 写回答

4条回答 默认 最新

  • Blue_sky90 2017-05-21 02:56
    关注

    你的p指针指向的内存已经释放了。test是个局部变量,函数返回的时候内存就回收了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥30 用arduino开发esp32控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题