| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 906 人关注过本帖
标题:请解释原因!
只看楼主 加入收藏
mashrb
Rank: 2
等 级:论坛游民
帖 子:47
专家分:29
注 册:2010-6-30
结帖率:76.92%
收藏
已结贴  问题点数:10 回复次数:12 
请解释原因!
之前看过说,不要返回指向局部变量的指针,但是下面的程序却可以正确运行,请解释原因。谢!

#include "stdio.h"
int *iint();
int *iint()
{  
  int a=50;
  return &a;
}
int main()
{
   int *ipa=iint();
   printf("num=%d\n\n",*ipa);
   system("pause");
}




















..
搜索更多相关主题的帖子: 解释 
2010-07-17 20:55
suntea
Rank: 2
等 级:论坛游民
帖 子:59
专家分:88
注 册:2010-6-24
收藏
得分:0 
我也很纠结着个问题的....

面试时候就考了类似的问题....


等待高手现身..........
2010-07-17 20:58
mashrb
Rank: 2
等 级:论坛游民
帖 子:47
专家分:29
注 册:2010-6-30
收藏
得分:0 
[local]1[/local]

这是我从书上看到的一个例题,是不是也返回了一个局部变量的指针呀,是不是有问题??

等待高手的解释................
2010-07-17 21:20
mashrb
Rank: 2
等 级:论坛游民
帖 子:47
专家分:29
注 册:2010-6-30
收藏
得分:0 
上传不了图片

[ 本帖最后由 mashrb 于 2010-7-17 21:24 编辑 ]
2010-07-17 21:22
pykuyuan
Rank: 2
等 级:论坛游民
帖 子:46
专家分:34
注 册:2009-6-26
收藏
得分:0 
输出结果是什么。

逐渐变黑
2010-07-17 21:24
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
收藏
得分:0 
要相信自己,确实是局部变量的指针
没错,可以这么用
不过要是出现错误难以查找
2010-07-17 21:25
mashrb
Rank: 2
等 级:论坛游民
帖 子:47
专家分:29
注 册:2010-6-30
收藏
得分:0 
int a=50;  这里a的值是多少就输出是多少,改变a的值,输出也跟着改变。
2010-07-17 21:26
mashrb
Rank: 2
等 级:论坛游民
帖 子:47
专家分:29
注 册:2010-6-30
收藏
得分:0 
觉得C语言有很多东西好莫名其妙。
行就是行,不行就是不行,搞得一下子行,一下子不行,一些刚入门的究竟是相信它行还是相信它不行都不知道。
2010-07-17 21:28
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
收藏
得分:0 
当然是相信撒,
2010-07-17 21:33
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:0 
确定每个变量是根据栈顶和偏移量
调用一个函数时 系统分了个动态堆栈,程序结束后释放
先把参数压入堆栈
再把函数的返回地址压入堆栈

当处理好函数的 函数体后
在根据堆栈先进后出原则
得到函数的返回地址
根据这个地址跳回原来的地方

而函数体里的局部变量.
被压入堆栈时 系统就给了栈顶的位置和偏移量

局部变量被释放了 但局部变量在那个堆栈的位置不变,也没被释放
所以可以打出那个局部变量的值
再次申明局部变量确实是被释放了
上面的论述适合这个例子
void main()
{
  int a=1;
   int i;
  int *p;
   p=&a;
  printf("%d",*p);
 {
    i=3;
    p=&i;
   
  }
  printf("%d",*p);
  
}
楼主你的是& 是变量的别名 跟*有些区别 *是要分配内存的
int *iint()
{  
  /*int a=50;
  return &a;*/
   int a=50;
   int *p=&a;
   return p;/*这样写你就知道指针是被释放的了*/
}



[ 本帖最后由 do8do8do8 于 2010-7-18 01:07 编辑 ]

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2010-07-17 21:47
快速回复:请解释原因!
数据加载中...
 
   



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

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