2012-12-28 35 views
1

假設我有兩個不同的結構,Struct1和Struct2。他們都有不同的元素。 如果我比他們這樣會發生什麼:關於C中結構的邏輯運算符

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

我只是發現了一些代碼這個邏輯,想知道發生了什麼事。 謝謝!

編輯:結構1和結構2都指向兩個不同的結構,而不是結構本身。

+0

這將有助於瞭解'Struct1'和'Struct2'的確切類型。 –

回答

3

對於這個工作,你必須有指針,而不是結構。也就是說,代碼可能是:

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); 
    } 
} 

你會有一個語義錯誤;你根本無法將整個結構與任何東西進行比較。

變量的大寫是非常規的。

5

if中使用結構是C的非法語法 - 它不會被符合的編譯器接受。換句話說:你不能在布爾上下文中使用結構。

最有可能在你的代碼 - 如果它真正的代碼 - Struct1不是結構,但(可能)的指針或別的東西。在這種情況下,如果兩者都是非NULL,則會採用if。

+0

難怪我在弄清楚它是如何執行布爾轉換的問題:-P –

+0

謝謝,進一步查看我的代碼時,他們都是指向結構的指針。 –

4

有兩種可能性在這裏:

這將檢查是否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) { 
    ... 
} 
0

它會返回「真」或1如果所有的子場是相同否則它會返回「假」或0

它在這些條件運算符的基本概念。

更多有關& &運營商參觀Here

感謝。

+0

&&(邏輯與)運算符指示兩個操作數是否爲真。'你給的鏈接沒有說比較子字段......還注意到這個問題說'Struct1'和'Struct2'是指針...... – user1055604