c++ - 在函数参数中,为什么 (i++) 在 (i+1) 运行时出现了一些错误
问题描述
案例1:当时我把i++放在函数参数上时,我得到了空白输出
案例 2:当我当时输入 i+1 而不是 i++ 时,我得到了正确的输出
#include <iostream>
using namespace std;
int foccurance(int arr[], int n, int i, int key)
{
if (arr[i] == key)
{
return i;
}
if (i == n)
{
return -1;
}
///here rather than i++ if i put i+1 then it runs properly
return foccurance(arr, n, i++, key);
}
int main()
{
int ar[] = {2, 5, 7, 4, 5, 6, 7};
int n = sizeof(ar) / sizeof(int);
int k;
cout << "key val=" << endl;
cin >> k;
int ind = foccurance(ar, n, 0, k);
cout << "your value is at index=" << ind;
return 0;
}
解决方案
表达式i++
和i+1
对不同事物的求值和运算之后,i
将持有不同的值。
void f(int v)
{
std::cout << v << std::endl;
}
int i = 0;
f(i+1); // Prints 1
std::cout << i << std::endl; // Prints 0
f(i++); // Prints 0
std::cout << i << std::endl; // Prints 1.
所以i+1
- 不会修改
i
,但是 - 它将评估为大于 1 的值
i
。
另一方面,i++
- 将修改
i
并设置为i+1
, i
但它会在向其添加 1 之前评估为原始值。
推荐阅读
- python - 如何在python“AttributeError:模块'serial'没有属性'Serial'”中修复此错误
- php - Laravel Eloquent 查询按平均评论评分过滤项目
- java - 我为计算器制作了 gui 程序,但如果文本字段中的值是字符串,我想在 java 中显示确认消息
- reactjs - 未捕获的错误:共享模块不可用于 React 模块联合中的即时消费
- c# - 无法解决此错误 Program.cs(14,33): 错误 CS0029: 无法将类型 'int' 隐式转换为 'char[]'
- scala - Sbt 包装脚本
- webstorm - WebStorm - 在每次提交之前删除 console.log
- python - python中是否有一个函数可以将散点图拟合到sin函数?
- javascript - 尝试将 Magicmouse.js 添加到自定义 wordpress 主题 - 无法加载
- php - 在 php Cpanel 中管道恢复电子邮件