If语句中的多指针测试

时间:2010-01-19 16:57:43

标签: c null pointers testing

考虑指向结构的指针

struct a_struct  
{   
    int A; 
};  

可以这样做:

struct a_struct *ptr;  

//...

if( ptr != NULL && ptr->A == 1)  
{  
    //work with ptr struct  
}     

或者您应该在测试其字段的开启之前测试指针是否有效。

if(ptr != NULL)
{
    if(ptr->A == 1)
    {
        //work with ptr struct
    }
}

3 个答案:

答案 0 :(得分:9)

是的,没关系。

&&运算符在C中短路,因此ptr->A == 1仅在ptr为非空时才会被评估。

答案 1 :(得分:5)

&&仅在第一个测试成功时评估第二个测试,因此您的代码(一个 if语句)完全正常。

答案 2 :(得分:1)

这会奏效,实际上是一个相当普遍的习语。如果你写了一个else条款,你必须担心哪个支票在那里被踢了,但这与任何其他多条件if没有区别 - 检查。