关于C中结构的逻辑运算符
假设我有两个不同的结构,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'的确切类型。 –