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

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是个局部变量,函数返回的时候内存就回收了

    点赞 打赏 评论
  • Blue_sky90 2017-05-21 02:58

    你可以用malloc申请内存付给指针P

    点赞 打赏 评论
  • weixin_38862648 2017-05-21 02:59

    兄弟这代码让你写的,我都无语了

    点赞 打赏 评论
  • _森航 2017-05-22 22:33
    你返回的指针指向的内存已经释放了,用malloc或者是返回一个实体吧。
    
    点赞 打赏 评论

相关推荐 更多相似问题