【问题标题】:Logic operators on Structures in CC中结构的逻辑运算符
【发布时间】:2012-12-28 20:07:17
【问题描述】:

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

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

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

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

【问题讨论】:

  • 了解Struct1Struct2 的确切类型会很有帮助。

标签: c if-statement struct logic


【解决方案1】:

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

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

【讨论】:

  • 难怪我在弄清楚它如何执行布尔转换时遇到问题:-P
  • 谢谢,进一步查看我的代码后,它们都是指向结构的指针。
【解决方案2】:

这里有两种可能:

这将检查 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) {
    ...
}

【讨论】:

    【解决方案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);
        }
    }
    

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

    变量的大写是常规的。

    【讨论】:

      【解决方案4】:

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

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

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

      谢谢。

      【讨论】:

      • The && (logical AND) operator indicates whether both operands are true. 您提供的链接没有说明比较子字段...还请注意问题说Struct1Struct2 是指针...
      猜你喜欢
      • 2012-09-02
      • 1970-01-01
      • 2014-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      相关资源
      最近更新 更多