c - 前缀和后缀运算符有什么区别?

标签 c postfix-operator prefix-operator

以下代码打印值 9。为什么?这里 return(i++) 将返回值 11,由于 --i 该值本身应该是 10,谁能解释一下这是如何工作的?

#include<stdio.h>
main()
{
    int i= fun(10);
    printf("%d\n",--i);
}

int fun (int i)
{
    return(i++);
}

最佳答案

++ 的后缀版本和前缀版本之间存在很大差异.

在前缀版本(即 ++i )中, i 的值递增,表达式的值是 i值.

在后缀版本(即 i++ )中, i 的值递增,但表达式的值是 i原始值.

我们来逐行分析以下代码:

int i = 10;   // (1)
int j = ++i;  // (2)
int k = i++;  // (3)
  1. i设置为10 (简单)。
  2. 这一行有两件事:
    • i增加到11 .
    • i值被复制到 j 。所以j现在等于11 .
  3. 这一行还有两件事:
    • i增加到12 .
    • i原始值(即 11 )被复制到 k 中。所以k现在等于11 .

运行代码后,i将为 12,但两者都是 jk将会是 11。

相同的内容适用于 -- 的后缀和前缀版本.

关于c - 前缀和后缀运算符有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43874698/

相关文章:

可以使用 strcpy 但不能使用 strcat 的情况

c - pthread mutex 在 macOS 上无法正常工作

转换双指针以及如何在 C 中使用

c++ - 检查函数指针类型

c++ - 为什么这段代码返回 0 和 1?

Javascript:为什么前缀运算符可以与模数一起使用,但不能与后缀运算符一起使用?

c# - C# 中的前缀和后缀运算符重载

c - 后缀 prefix++ 和二进制 & 运算符的优先级

c++ - ostream 运算符在重载的后缀增量/减量运算符上重载

c - 前缀运算符和后缀运算符有什么区别?