首页 > 解决方案 > C中的返回和++

问题描述

输出:

#include <stdio.h>


int Fun1(int *X)
{
    return (*X)++;
}


int main(void)
{
    int a = 0, b = 5;
    a = Fun1(&b);
    printf("a = %d.  b = %d.\n", a, b);
}

是:

a = 5。b = 6。

当我们 return 时(*X)++,函数执行不应该在我们 return 时停止(*X),所以++不执行吗?

标签: c

解决方案


return语句导致对其操作数进行评估。表达式的计算包括计算它的值和它的副作用。

C 标准++在 6.5.2.4 2 中指定了后缀的行为:

后缀 ++ 运算符的结果是操作数的值。作为副作用,操作数对象的值会递增(即,将相应类型的值 1 添加到其中)……</p>

类似地,如果我们写了a = b++;,赋值不会只是赋值并完成。副作用也会发生。

根据 6.5 1,副作用是表达式功能的一部分:

表达式是一系列运算符和操作数,用于指定值的计算,或指定对象或函数,或产生副作用,或执行它们的组合......</p>


推荐阅读