关于C中结构的逻辑运算符

问题描述:

假设我有两个不同的结构,Struct1和Struct2。他们都有不同的元素。 如果我比他们这样会发生什么:关于C中结构的逻辑运算符

if((Struct1) && (Struct2)) 
{ 
    doSomething(); 
} 

我只是发现了一些代码这个逻辑,想知道发生了什么事。 谢谢!

编辑:结构1和结构2都指向两个不同的结构,而不是结构本身。

+0

这将有助于了解'Struct1'和'Struct2'的确切类型。 –

对于这个工作,你必须有指针,而不是结构。也就是说,代码可能是:

void somefunc(struct structA *Struct1, struct structB *Struct2) 
{ 
    if (Struct1 && Struct2) 
    { 
     doSomething(Struct1, Struct2); 
    } 
} 

这会在使用它们之前检查两个指针​​是否都为NULL。你不能直接比较结构,所以如果代码是:

void somefunc(struct structA Struct1, struct structB Struct2) 
{ 
    if (Struct1 && Struct2) 
    { 
     doSomething(Struct1, Struct2); 
    } 
} 

你会有一个语义错误;你根本无法将整个结构与任何东西进行比较。

变量的大写是非常规的。

if中使用结构是C的非法语法 - 它不会被符合的编译器接受。换句话说:你不能在布尔上下文中使用结构。

最有可能在你的代码 - 如果它真正的代码 - Struct1不是结构,但(可能)的指针或别的东西。在这种情况下,如果两者都是非NULL,则会采用if。

+0

难怪我在弄清楚它是如何执行布尔转换的问题:-P –

+0

谢谢,进一步查看我的代码时,他们都是指向结构的指针。 –

有两种可能性在这里:

这将检查是否ST1和ST2都没有指向NULL:

struct Struct1 *st1 = ...; 
struct Struct2 *st2 = ...; 

if (st1 && st2) { 
    ... 
} 

这是无效代码:

struct Struct1 st1 = ...; 
struct Struct2 st2 = ...; 

if (st1 && st2) { 
    ... 
} 

请注意,这也是无效的代码:

struct Struct1 st1 = ...; 

if (st1) { 
    ... 
} 

它会返回“真”或1如果所有的子场是相同否则它会返回“假”或0

它在这些条件运算符的基本概念。

更多有关& &运营商参观Here

感谢。

+0

&&(逻辑与)运算符指示两个操作数是否为真。'你给的链接没有说比较子字段......还注意到这个问题说'Struct1'和'Struct2'是指针...... – user1055604