首页 文章

C中的“ - >”运算符是什么?

提问于
浏览
7999

comp.lang.c++.moderated 上阅读Hidden Features and Dark Corners of C++/STL后,我完全惊讶于以下代码片段在Visual Studio 2008和G 4.4中编译和工作 .

这是代码:

#include <stdio.h>
int main()
{
    int x = 10;
    while (x --> 0) // x goes to 0
    {
        printf("%d ", x);
    }
}

我假设这是C,因为它也适用于GCC . 标准中定义了哪里,它来自何处?

21 回答

  • 110

    运行此代码时,我的编译器将打印出9876543210 .

    #include <iostream>
    int main()
    {
        int x = 10;
    
        while( x --> 0 ) // x goes to 0
        {
            std::cout << x;
        }
    }
    

    正如所料 . while( x-- > 0 ) 实际上意味着 while( x > 0) . x-- 帖子递减 x .

    while( x > 0 ) 
    {
        x--;
        std::cout << x;
    }
    

    是一种不同的写作方式 .

    虽然原来看起来像“虽然x变为0”但很好 .

  • 115

    x 可以在相反的方向上更快地变为零:

    int x = 10;
    
    while( 0 <---- x )
    {
       printf("%d ", x);
    }
    

    8 6 4 2

    你可以用箭头控制速度!

    int x = 100;
    
    while( 0 <-------------------- x )
    {
       printf("%d ", x);
    }
    

    90 80 70 60 50 40 30 20 10

    ;)

  • 7690

    它的

    #include <stdio.h>
    int main(void){
         int x = 10;
    
         while( x-- > 0 ){ // x goes to 0
    
           printf("%d ", x);
         }
    
         return 0;
    }
    

    只是空间使事情看起来很有趣, -- 减少和 > 比较 .

  • 1174

    为什么所有的并发症?

    原始问题的简单答案就是:

    #include <stdio.h>
    int main()
    {
        int x = 10;
        while (x > 0) 
        {
            printf("%d ", x);
            x = x-1;
        }
    }
    

    做同样的事情 . 不是说你应该这样做,但它做同样的事情并且会在一篇文章中回答这个问题 .

    x-- 只是上述的简写, > 只是正常大于 operator . 没什么大不了的!

    现在有太多的人把简单的事情弄复杂了;)

  • 510
    while( x-- > 0 )
    

    是如何解析的 .

  • 328

    它相当于

    while (x-- > 0)
    

    x-- (减去后)相当于 x = x-1 所以,代码转换为:

    while(x > 0) {
        x = x-1;
        // logic
    }
    
  • 2256

    --decrement 运算符, >greater-than 运算符 .

    这两个运算符作为单个运算符应用,如 --> .

  • 222

    此代码首先比较x和0,然后递减x . (也在第一个答案中说:你是后递减x然后将x和0与 > 运算符进行比较 . )请参阅此代码的输出:

    9 8 7 6 5 4 3 2 1 0
    

    我们现在首先通过在输出中看到0进行比较然后递减 .

    如果我们想先减少然后比较,请使用以下代码:

    #include <stdio.h>
    int main(void)
    {
        int x = 10;
    
        while( --x> 0 ) // x goes to 0
        {
            printf("%d ", x);
        }
        return 0;
    }
    

    那个输出是:

    9 8 7 6 5 4 3 2 1
    
  • 378

    --> 之间缺少空格 . x 后递减,即在检查条件 x>0 ? 后递减 .

  • 204

    CC++遵守"maximum munch"规则 . 同样的方式a --- b被翻译为 (a--) - b ,在你的情况下 x-->0 转换为 (x--)>0 .

    规则本质上是从左到右,表达式是通过获取将形成有效表达式的最大字符来形成的 .

  • 130

    完全是极客,但我将使用这个:

    #define as ;while
    
    int main(int argc, char* argv[])
    {
        int n = atoi(argv[1]);
        do printf("n is %d\n", n) as ( n --> 0);
        return 0;
    }
    
  • 245

    它是两个运营商的组合 . 第一个 -- 用于递减值, > 用于检查该值是否大于右侧操作数 .

    #include<stdio.h>
    
    int main()
    {
        int x = 10;
    
        while (x-- > 0)
            printf("%d ",x);
    
        return 0;
    }
    

    输出将是:

    9 8 7 6 5 4 3 2 1 0
    
  • 158

    或者对于完全不同的东西... x幻灯片到0

    while (x --\
                \
                 \
                  \
                   > 0)
         printf("%d ", x);
    

    不是那么数学,但......每张图片都描绘了千言万语......

  • 103

    --> 的用法具有历史意义 . 减少(在某些情况下仍然是),比在x86架构上递增更快 . 使用 --> 表明 x 将会 0 ,并吸引具有数学背景的人 .

  • 122

    无论如何,我们现在有一个"goes to"运营商 . "-->" 很容易被人们记住作为一个方向,"while x goes to zero"意思是直的 .

    此外,它在某些平台上比 "for (x = 10; x > 0; x --)" 更有效率 .

  • 290

    实际上, x 是后递减的,并且正在检查该条件 . 它不是 --> ,它是 (x--) > 0

    注意:检查条件后, x 的值会更改,因为它会后递减 . 也可能发生一些类似的情况,例如:

    -->    x-->0
    ++>    x++>0
    -->=   x-->=0
    ++>=   x++>=0
    
  • 931

    注意 - >不是运营商 . 它实际上是两个独立的运算符, - 和> .

    条件代码递减 x ,同时返回 x 的原始(未递减)值,然后使用 > 运算符将原始值与 0 进行比较 .

    To better understand, the statement could be written as follows:

    while((x--) > 0)
    
  • 306

    这是一个非常复杂的操作员,所以即使ISO/IEC JTC1 (Joint Technical Committee 1)将其描述放在C标准的两个不同部分 .

    开玩笑说,它们是两个不同的运算符: --> 分别在C03标准的§5.2.6/ 2和§5.9中描述 .

  • 25

    我读过的一本书(我记不清哪本书)说明了: Compilers try to parse expressions to the biggest token 使用左右规则 .

    在这种情况下,表达式:

    x-->0
    

    解析最大的代币:

    token 1: x
    token 2: --
    token 3: >
    token 4: 0
    conclude: x-- > 0
    

    The same rule 适用于此表达式:

    a-----b
    

    解析后:

    token 1: a
    token 2: --
    token 3: --
    token 4: -
    token 5: b
    conclude: (a--)-- - b
    

    我希望这有助于理解复杂的表达式^^

  • 21

    这完全一样

    while (x--)
    {
       printf("%d ", x);
    }
    

    对于非负数

  • 2520

    我们在循环括号“ () " and terminating condition inside the braces" {} ”中定义条件的常规方法,但是 --> 是一次定义所有内容的方式 . 例如:

    int abc(){
        int a = 5
        while((a--) > 0){ // Decrement and comparison both at once
            // Code
        }
    }
    

    它说,递减 a 并运行循环,直到 a 大于 0

    其他方式应该是这样的:

    int abc(){
        int a = 5
        while(a > 0){
            // Code
            a = a -1 // Decrement inside loop
        }
    }
    

    两种方式,我们做同样的事情,实现相同的目标 .

相关问题