游穆族人 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 求SC-LIWC词典!
  • ¥20 有关esp8266连接阿里云
  • ¥15 C# 调用Bartender打印机打印
  • ¥100 华为ens111111111111111111111111111111111111111111
  • ¥15 我这个代码哪里有问题 acm 平台上显示错误 90%,我自己运行好像没什么问题
  • ¥50 C#编程中使用printDocument类实现文字排版打印问题
  • ¥15 找会编程的帅哥美女 可以用MATLAB里面的simulink编程,用Keil5编也可以。
  • ¥15 已知隐函数其中一个变量τ的具体值,求另一个变量
  • ¥15 r语言Hurst指数
  • ¥15 Acrn IVSHMEM doorbell问题