假設我有兩個不同的結構,Struct1和Struct2。他們都有不同的元素。 如果我比他們這樣會發生什麼:關於C中結構的邏輯運算符
if((Struct1) && (Struct2))
{
doSomething();
}
我只是發現了一些代碼這個邏輯,想知道發生了什麼事。 謝謝!
編輯:結構1和結構2都指向兩個不同的結構,而不是結構本身。
假設我有兩個不同的結構,Struct1和Struct2。他們都有不同的元素。 如果我比他們這樣會發生什麼:關於C中結構的邏輯運算符
if((Struct1) && (Struct2))
{
doSomething();
}
我只是發現了一些代碼這個邏輯,想知道發生了什麼事。 謝謝!
編輯:結構1和結構2都指向兩個不同的結構,而不是結構本身。
對於這個工作,你必須有指針,而不是結構。也就是說,代碼可能是:
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。
難怪我在弄清楚它是如何執行布爾轉換的問題:-P –
謝謝,進一步查看我的代碼時,他們都是指向結構的指針。 –
有兩種可能性在這裏:
這將檢查是否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) {
...
}
&&(邏輯與)運算符指示兩個操作數是否爲真。'你給的鏈接沒有說比較子字段......還注意到這個問題說'Struct1'和'Struct2'是指針...... – user1055604
這將有助於瞭解'Struct1'和'Struct2'的確切類型。 –