【问题标题】:C Syntax: incrementing and assigning values in the same lineC语法:在同一行中递增和赋值
【发布时间】:2014-11-18 21:26:27
【问题描述】:

如果你有两个变量:int a 和 int b,这在 C 代码中到底是做什么的?

a++ = b

这是否使得 a = b + 1?

【问题讨论】:

  • a++ 不是可修改的左值。编译器应该拒绝它。
  • 我认为您正在寻找这样的东西:a = b + 1; 您将b 分配给a + 1! (@GrzegorzSzpetkowski Compiler should reject it 不编译器必须!否则它是一个非常糟糕的编译器:D)
  • 这里是完整的代码:pastebin.com/73W4in9u 我认为变量是否是指针并不重要,但我想确实如此。谁能向我解释那一行发生了什么?
  • @user3808547 要么编辑这个问题以获得你的真实代码而不是a++ = b;,要么使用真实代码发布一个新问题,或者发布一个新问题“a++ = b 和 * 之间有什么区别目标++ = b"。 (cmets 不应用于提出新问题)。这个问题本身是可以的,因为“a++ = b;做什么”是一个有效的问题,但是由于您在 cmets 中提出了一个新问题,因此线程变得混乱。网站格式是每个线程一个问题。

标签: c syntax increment


【解决方案1】:

向你提问这是否会导致 (a = b + 1):

a++ = b  //[Error] lvalue required as left operand of assignment 

不,它没有!你的编译器应该/必须给你一个错误!

如果您正在寻找此操作(a = b + 1),请使用它!

编辑:

如果我们看看你的函数:

int copy_block(int *src, int *dest, int len) {  //Function declaration, Return type int, 3 arguments (2x int * and 1x int)

    int result = 0;                             //variable assignment
    int val    = 0;                             //variable assignment
    while (len > 0) {                           //while loop
        val = *src;                             //variable assignment
        *src++;                                 //increment the value where the pointer is pointing 
        *dest++ = val;                          //increment adress by int size then assignment of val
        result = result ^ val;                  //Bitwise XOR
        len--;                                  //decrement variable
    }

    return result;                              //Return variable

}

按位异或示例:

  X      Y     X^Y
true   false  true
true   true   false
false  false  false
false  true   true

a = 45 ^ 35;  // a == 14

45 = 0010 1101
35 = 0010 0011
---------------
14 = 0000 1110

也供进一步参考:

Operator priority

Bitwise operator

【讨论】:

  • 这不是我在编写代码,而是我试图理解为家庭作业提供的代码。实际代码在这里:pastebin.com/73W4in9u
  • @user3808547 但这是同一行代码!那么你现在必须知道什么?
  • 什么意思?例如,result ^= val 可以扩展为 result = result ^ val。 *dest++ = val;扩展以便于理解?
  • @user3808547 在您的行中增加指针的地址!因为 ++ 比 * 具有更高的优先级,然后你将 val 分配给新的指针地址!
  • “编辑”部分没有回答问题; “*dest++ 做了什么”是一个不同的问题,应该单独提问和回答
猜你喜欢
  • 2010-12-09
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多