游穆族人 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 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据