| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 618 人关注过本帖
标题:有谁可以解释一下下面代码的结果为什么是那样的呢?
只看楼主 加入收藏
小笑孩
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-11-24
收藏
 问题点数:0 回复次数:5 
有谁可以解释一下下面代码的结果为什么是那样的呢?
老师说跟 堆 栈 有关
#include <stdio.h>
#include <stdlib.h>
typedef struct student{
    int number;   //学号
    int age;      //年龄
} student;
student * getStudent(){
    student stu;
    stu.age = 100;   //年龄默认初始为岁
    stu.number = 100; //学号默认初始为号
    return &stu;
}

结果是:student 100 is 100.
student 4241459 is 4325404.
为什么第二个是那样的呢???
void main(){    
    student * ptr = getStudent();    
    int age = ptr->age, number = ptr->number;
    printf("student %d is %d .\n",number,age);
    age = ptr->age, number = ptr->number;
    printf("student %d is %d .\n",number, age);
}
搜索更多相关主题的帖子: 代码 结果 解释 
2008-09-08 14:52
csynyk
Rank: 1
等 级:新手上路
威 望:1
帖 子:114
专家分:0
注 册:2008-8-9
收藏
得分:0 
你是不是在csdn上问过相同的问题阿?我记得给你解释过了!

http://blog./csynyk
2008-09-08 14:57
小笑孩
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-11-24
收藏
得分:0 
没,我是第一次,可能是我同学吧,可以把那个地址给我吗?我看一下你的解释
2008-09-08 15:02
csynyk
Rank: 1
等 级:新手上路
威 望:1
帖 子:114
专家分:0
注 册:2008-8-9
收藏
得分:0 
student * getStudent()
 { student stu; //这是一个局部变量,在栈内!     
    stu.age = 100;
    stu.number = 100;
     return &stu; //函数退出运行stu的栈空间就被释放了,后面一旦有调用栈空间的代码运行,里面的内容马上就被改写了。
}

http://blog./csynyk
2008-09-08 15:03
csynyk
Rank: 1
等 级:新手上路
威 望:1
帖 子:114
专家分:0
注 册:2008-8-9
收藏
得分:0 
改正过来:
student * getStudent()
{
    student *stu=(student *)malloc(sizeof(student));      
    stu->age = 100;
    stu->number = 100;
    return stu;
}
//分配的这个堆上空间如果不用了记得要释放,否则会一直保留在那里占用空间

http://blog./csynyk
2008-09-08 15:06
小笑孩
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-11-24
收藏
得分:0 
是不是释放后,在运行原来的那段代码,结果都是随机的呢?
2008-09-08 15:14
快速回复:有谁可以解释一下下面代码的结果为什么是那样的呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014248 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved