|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 请解释原因!
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
906
人关注过本帖
标题:
请解释原因!
只看楼主
加入收藏
mashrb
等 级:
论坛游民
帖 子: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
等 级:
论坛游民
帖 子:59
专家分:88
注 册:2010-6-24
第
2
楼
收藏
得分:0
我也很纠结着个问题的....
面试时候就考了类似的问题....
等待高手现身..........
2010-07-17 20:58
举报帖子
使用道具
赠送鲜花
mashrb
等 级:
论坛游民
帖 子:47
专家分:29
注 册:2010-6-30
第
3
楼
收藏
得分:0
[local]1[/local]
这是我从书上看到的一个例题,是不是也返回了一个局部变量的指针呀,是不是有问题??
等待高手的解释................
2010-07-17 21:20
举报帖子
使用道具
赠送鲜花
mashrb
等 级:
论坛游民
帖 子:47
专家分:29
注 册:2010-6-30
第
4
楼
收藏
得分:0
上传不了图片
[
本帖最后由 mashrb 于 2010-7-17 21:24 编辑
]
2010-07-17 21:22
举报帖子
使用道具
赠送鲜花
pykuyuan
等 级:
论坛游民
帖 子:46
专家分:34
注 册:2009-6-26
第
5
楼
收藏
得分:0
输出结果是什么。
逐渐变黑
2010-07-17 21:24
举报帖子
使用道具
赠送鲜花
okayyyy
等 级:
论坛游民
威 望:
2
帖 子:102
专家分:70
注 册:2010-6-15
第
6
楼
收藏
得分:0
要相信自己,确实是局部变量的指针
没错,可以这么用
不过要是出现错误难以查找
2010-07-17 21:25
举报帖子
使用道具
赠送鲜花
mashrb
等 级:
论坛游民
帖 子:47
专家分:29
注 册:2010-6-30
第
7
楼
收藏
得分:0
int a=50;
这里a的值是多少就输出是多少,改变a的值,输出也跟着改变。
2010-07-17 21:26
举报帖子
使用道具
赠送鲜花
mashrb
等 级:
论坛游民
帖 子:47
专家分:29
注 册:2010-6-30
第
8
楼
收藏
得分:0
觉得C语言有很多东西好莫名其妙。
行就是行,不行就是不行,搞得一下子行,一下子不行,一些刚入门的究竟是相信它行还是相信它不行都不知道。
2010-07-17 21:28
举报帖子
使用道具
赠送鲜花
okayyyy
等 级:
论坛游民
威 望:
2
帖 子:102
专家分:70
注 册:2010-6-15
第
9
楼
收藏
得分:0
当然是相信撒,
2010-07-17 21:33
举报帖子
使用道具
赠送鲜花
do8do8do8
来 自:沙滩
等 级:
贵宾
威 望:
17
帖 子:366
专家分:1845
注 册:2010-7-2
第
10
楼
收藏
得分: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
举报帖子
使用道具
赠送鲜花
13
1/2页
1
2
快速回复:
请解释原因!
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.013014 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved