i++和++i有什什么区别
时间: 2023-12-26 09:27:06 浏览: 29
i++和++i都是C语言和C++语言中的自增运算符,它们的区别在于它们的执行顺序和返回值不同。
++i是先将i加1,然后再返回i的值,即先执行加法运算,再进行赋值操作。
i++是先返回i的值,然后再将i加1,即先进行赋值操作,再执行加法运算。
在实际应用中,++i的性能要比i++的性能好,因为i++需要先返回i的值,再进行加1操作,而++i可以直接进行加1操作,避免了返回值的开销。
以下是两个例子来说明它们的区别:
```c++
int i = 1;
int a = ++i; // a = 2, i = 2
```
```c++
int i = 1;
int a = i++; // a = 1, i = 2
```
相关问题
i++ ++i在循環裏面有什麽區別嗎
在循环中,字母 'i' 通常用作索引变量或迭代变量的名称。它用于迭代器循环(如 for 循环)中,可以帮助我们遍历或处理数据结构中的每个元素。
'i' 作为一个变量名是任意选择的,你可以选择任何合法的变量名来表示迭代变量。使用 'i' 是因为它表示 "index" 或 "iterator",在很多编程语言中被视为传统命名约定。然而,在某些情况下,可能会使用其他字母(例如 'j','k' 等)。
因此,在循环中使用 'i' 只是一种约定和惯例,并没有特定的区别。它只是用于表示当前循环的迭代次数或当前迭代所处理的元素。
painter.setPen(QPen(Qt::blue, 5)); // 设置画笔颜色和宽度 for (int i = 0; i < paths[i].size() - 1; i++) { painter.drawLine(paths[i][i]->getX() * 25 + 200, paths[i][i]->getY() * 25 + 50, paths[i][i + 1]->getX() * 25 + 200, paths[i][i + 1]->getY() * 25 + 50); },爲什麽一運行,就白屏卡死,怎麽修改代碼
可能是因为 `paths` 数组中没有数据,导致程序卡死。你可以在运行前检查一下 `paths` 数组是否有数据。
此外,你的循环条件应该是 `i < paths.size() - 1`,而不是 `i < paths[i].size() - 1`。因为 `paths` 是一个二维数组,你需要遍历每个子数组,即 `paths` 的大小,而不是 `paths[i]` 子数组的大小。
修改代码如下:
```c++
if (paths.size() > 0) { // 检查 paths 是否有数据
painter.setPen(QPen(Qt::blue, 5)); // 设置画笔颜色和宽度
for (int i = 0; i < paths.size() - 1; i++) { // 遍历每个子数组
for (int j = 0; j < paths[i].size() - 1; j++) { // 遍历每个子数组中的点
painter.drawLine(paths[i][j]->getX() * 25 + 200, paths[i][j]->getY() * 25 + 50, paths[i][j + 1]->getX() * 25 + 200, paths[i][j + 1]->getY() * 25 + 50);
}
}
}
```
这样可以避免白屏卡死问题,并且可以正确绘制每个子数组中的路径。