空指针,快晕死了~~~

[复制链接]
 楼主| mathieu 发表于 2008-10-8 13:42 | 显示全部楼层 |阅读模式
在C51里
int* br = NULL
main()
{
    int* test1;
    int* test2 = NULL;
    test1 = br;

    if(test1)
        printf("test1 ");

    if(test2)
        printf("test2 ");
}
1)我理解test1和test2都是空指针,可是为什么会输出test1,而不输出test2?

在PC机上的Turbo C环境test1和test2都不会输出。

2)可是在C51和TC里,对NULL的定义也没有什么不同,为什么会输出不一样?

3)在C51里里,对指针有效性的判断,应该怎么判断呢?
chen3bing 发表于 2008-10-8 14:26 | 显示全部楼层

re

怎么我试了一下,test1和test2都不输出。
l0p0c 发表于 2008-10-8 17:05 | 显示全部楼层

应该都不会输出!

许世霞 发表于 2008-10-8 17:51 | 显示全部楼层

。。。

  是不是先要搞清楚NULL所在的头文件里对于它的定义,以及编译器里的预编译处理问题!再看这个问题!这么简单的看确实看不出什么来的
johnwjl 发表于 2008-10-8 19:37 | 显示全部楼层

指针不是这样判断的。

判断指针,请按如下:    
    if(test1 == NULL)
        printf("test1 ");

    if(test2 == NULL)
        printf("test2 ");
caijie 发表于 2008-11-11 21:58 | 显示全部楼层

空指针

int* br = NULL
main()
{
    int* test1;
    int* test2 = NULL;
    test1 = br;

    if(test1)
        printf("test1 ");

    if(test2)
        printf("test2 ");
}
直接这么写不好! 而且MISCA标准中好像也规定了定义了变量 必须要给初始化值
而且编译器的实现的差异比较大, 问题不能一概而论!。多测试, 但是养成良好的习惯是关键!
thw 发表于 2008-11-11 22:41 | 显示全部楼层

。。。

很有可能你的
test1 = br;
被优化掉了。
看看反汇编吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

28

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部