1

假设我有两个不同的结构,Struct1 和 Struct2。它们都有不同的元素。如果我这样比较它们会发生什么:

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

我刚刚找到了一些具有这种逻辑的代码,并且想知道发生了什么。谢谢!

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

4

4 回答 4

5

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

最有可能在您的代码中 - 如果它真正的代码 -Struct1不是结构,而是(可能)指针或其他东西。在这种情况下,如果两者都不是 NULL,则将采用 if。

于 2012-12-28T20:09:30.853 回答
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) {
    ...
}
于 2012-12-28T20:11:38.840 回答
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);
    }
}

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

变量的大写是常规的。

于 2012-12-28T20:11:49.807 回答
0

如果所有子字段都相同,它将返回“true”或 1,否则它将返回“false”或 0。

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

有关 && 运算符的更多信息,请访问此处

谢谢。

于 2012-12-28T20:22:23.673 回答