| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 578 人关注过本帖
标题:求大侠解决
只看楼主 加入收藏
sxwsxw
Rank: 2
等 级:论坛游民
帖 子:23
专家分:66
注 册:2010-3-9
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:8 
求大侠解决
程序代码:
#include<stdio.h>
int* fun(void)
{
    int *b=3;

    return b;
}
int main()
{
    int *a=NULL;
    a=fun();
    printf("%d",*a);
    getch();
    return 0;
}
如上程序:运行结果很奇怪。
程序代码:
#include<stdio.h>
int* fun(void)
{
    int *b;
     *b=3;
    return b;
}
int main()
{
    int *a=NULL;
    a=fun();
    printf("%d",*a);
    getch();
    return 0;
}
改成这样的话,运行结果正确。
求详解,尽量详细一点,拜托了!
2010-08-15 16:42
xiayizhanzyf
Rank: 2
等 级:论坛游民
帖 子:80
专家分:78
注 册:2010-7-21
收藏
得分:5 
int *b,定义的是指针,3是整型,这是初始化错误
2010-08-15 16:52
sxwsxw
Rank: 2
等 级:论坛游民
帖 子:23
专家分:66
注 册:2010-3-9
收藏
得分:0 
回复 2楼 xiayizhanzyf
哦,这个我还以为是跟局部变量的存储有关呢
2010-08-15 18:01
error007
Rank: 2
等 级:论坛游民
帖 子:32
专家分:23
注 册:2010-7-12
收藏
得分:5 
int *b=3;相当于int *b;b=3;你说对不对。。或(int*)进行强制类型转换

[ 本帖最后由 error007 于 2010-8-15 19:49 编辑 ]

天才就是重复次数最多的人。
2010-08-15 19:42
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:5 
无论如何,两段程序都是不对的。
第一个是用整数给指针变量赋值,这在嵌入式以外的环境中多半是无意义的。
第二个是给野指针的目标赋值,这将在运行时导致错误,或者有很大机会造成系统崩溃。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-08-15 20:21
liuzhengshen
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:83
专家分:141
注 册:2010-4-23
收藏
得分:5 
呵呵
2010-08-16 09:32
sxwsxw
Rank: 2
等 级:论坛游民
帖 子:23
专家分:66
注 册:2010-3-9
收藏
得分:0 
回复 5楼 forever74
第二个为什么也错,有点不理解,运行结果是正确的呀
2010-08-16 10:21
sxwsxw
Rank: 2
等 级:论坛游民
帖 子:23
专家分:66
注 册:2010-3-9
收藏
得分:0 
程序代码:
char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
那大家认为这个程序运行结果是什么?
2010-08-16 10:23
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:0 
看来有一些关于指针的常识你还没有注意到。
1楼程序二,一个指针,有可能指向系统有用的位置,这时你给它的目标赋值,也就有可能修改掉了一些系统数据,造成死机或其它不愉快的后果。
    至于你运行的时候看起来结果正确,对于TC来说确实是这样,但是无论如何也不能说明程序这样写就是正确的。
    就好像某人靠贩毒赚钱的话,不管成功都少次,也不能算是安全的。
8楼的代码,作为常识,p是个自动局部变量,当它所在的函数结束以后,它所在的内存单元就随时可以分配给其它用途,你这时再引用它,就有可能引起冲突。
    同上述道理,在TC环境下,你可能经常得到“正确”的结果,但是这不说明你的程序正确。
收到的鲜花
  • sxwsxw2010-08-28 11:08 送鲜花  4朵   附言:好文章

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-08-16 18:27
快速回复:求大侠解决
数据加载中...
 
   



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

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