c - 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)
,所以++
不执行吗?
解决方案
该return
语句导致对其操作数进行评估。表达式的计算包括计算它的值和它的副作用。
C 标准++
在 6.5.2.4 2 中指定了后缀的行为:
后缀 ++ 运算符的结果是操作数的值。作为副作用,操作数对象的值会递增(即,将相应类型的值 1 添加到其中)……</p>
类似地,如果我们写了a = b++;
,赋值不会只是赋值并完成。副作用也会发生。
根据 6.5 1,副作用是表达式功能的一部分:
表达式是一系列运算符和操作数,用于指定值的计算,或指定对象或函数,或产生副作用,或执行它们的组合......</p>
推荐阅读
- php - 如何使图像的名称成为会话变量?
- django - DRF 无法使用 PrimaryKeyRelatedField 上的视图名称解析超链接关系的 URL
- c# - unity没有显示问题,但还是报错
- excel - 跟踪工作表上的更改,复制不是活动单元格行中活动单元格的单元格并记录值
- pyqt5 - 向下钻取 QListWidget
- python - 如何通过最后一个值选择特定的订单集?
- angular - 如何从订阅中返回价值?
- swift - 为什么这个闭包被调用了 1201 次而不是 900 次?
- c# - 无法在 Unity 中序列化和反序列化 JSON
- c# - 如何下载 Angular 6 中的 excel 文件