【问题标题】:Warning comparison integer and pointer [duplicate]警告比较整数和指针[重复]
【发布时间】:2017-07-09 05:02:09
【问题描述】:
int b[5] = {1,2,3,4,5};
int *s = &b[0];
int *p = &b[1];
int *q = &b[2];
int *r = &b[2];

我的问题是,当我使用 if( p < q < r) 比较 p < q < r 时,我收到了警告消息。

我首先想到的是(p < q) == True,所以不可能将布尔值与整数(r的地址值)进行比较。但是,当True 被视为整数时,它是1。对吗?所以,在我看来,1 < r 可能是有道理的。

我的想法有什么问题?

【问题讨论】:

标签: c


【解决方案1】:

您似乎认为表达式 p < q < r 翻译为“p 小于 q,q 小于 r”,这是典型的数学符号。

但是,C 编程语言不一定遵循数学约定。 p < q < r 实际翻译成的是 p < q,它可能是 0 或 1,具体取决于它是假还是真,然后是 0 < r1 < r,这取决于之前的差异。

正如另一位用户所指出的,“p 小于 q 且 q 小于 r”的正确写法是 p < q && q < r

【讨论】:

    【解决方案2】:

    从以下位置更改您的条件:

    if(p < q < r) {}
    

    收件人:

    if(p < q && q < r) {}
    

    【讨论】:

      【解决方案3】:

      1 &lt; r 不起作用,因为1 是一个整数,而r 是一个指针。因此警告。

      我的猜测是您 (a) 打算取消引用指针,并且 (b) 需要将链式比较替换为 &amp;&amp;

      if (*p < *q && *q < *r)
      

      【讨论】:

      • 我知道这是多么愚蠢的问题。我怎样才能比较完全不同的数据类型......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 2017-06-25
      • 1970-01-01
      相关资源
      最近更新 更多