打印

空指针,快晕死了~~~

[复制链接]
1809|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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所在的头文件里对于它的定义,以及编译器里的预编译处理问题!再看这个问题!这么简单的看确实看不出什么来的

使用特权

评论回复
5
johnwjl| | 2008-10-8 19:37 | 只看该作者

指针不是这样判断的。

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

    if(test2 == NULL)
        printf("test2 ");

使用特权

评论回复
6
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标准中好像也规定了定义了变量 必须要给初始化值
而且编译器的实现的差异比较大, 问题不能一概而论!。多测试, 但是养成良好的习惯是关键!

使用特权

评论回复
7
thw| | 2008-11-11 22:41 | 只看该作者

。。。

很有可能你的
test1 = br;
被优化掉了。
看看反汇编吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

28

帖子

0

粉丝