c++ - 为什么在 C++ 中不可能对声明为数组的变量进行递增或执行数学运算,例如乘法运算
问题描述
为什么在 C++ 中,声明为数组的变量可以加或减整数,但不能递增(++)或递减(--)或乘数等,即使变量存储数组的起始地址?例如
#include <iostream>
using namespace std;
int main()
{
int x[] = {12,33,41,55,68};
cout<<x<<"\n"; // Output : 0x7af786c84320
cout<<x+1<<"\n"; // Output : 0x7af786c84324
cout<<x+1000<<"\n"; // Output : 0x7af786c852c0
cout<<x-1000<<"\n"; // Output : 0x7af786c83380
cout<<x*1<<"\n"; /* Output : invalid operands of types
'int[5]' and 'int' to binary 'operator*' */
cout<<x*2<<"\n";
cout<<x++<<"\n"; /* Error : lvalue required as increment
operand */
cout<<x--<<"\n";
x=x; //Error : invalid array assignment
cout<<x<<"\n";
return 0;
}
如果有人能解释详细声明数组时会发生什么,那就更好了。以及为什么在所有算术运算中只有“+”和“-”有效,“*”或其他无效。
解决方案
需要注意的几点:
- 替换
int main
为int main()
(正确声明函数) - 替换
int x={2,3,4,5,6}
为int x[]={2,3,4,5,6};
(正确声明数组) - 数组不能递增,但指向数组的指针可以。(见下文)
- 我假设您要打印数组第一个元素的 VALUE,而不是第一个元素的 ADDRESS。
- 确保以分号结束所有行。
- 从技术上讲,该
main
功能应return 0
在成功完成后完成。
综上所述,下面的代码应该可以做到这一点。
int main() {
int *y, x[] = {2,3,4,5,6};
y = x;
cout << *y++;
return 0;
}
现在,逐行检查
- 声明一个指向 int (
y
) 的指针,声明一个 int 数组 (x
),并初始化该数组。 - 设置
y
为等于x
(即将数组的地址存储在 中y
)。 - 取消引用
y
(即获取该地址处整数的值),打印它,然后递增y
以指向x
.
推荐阅读
- php - 在 PHP 中将表单数据插入 MySQL
- php - 在服务器登录页面或注册页面上出现 codeigniter 问题
- java - Hive UDF - evaluate() 方法中的错误
- php - 在获取字段 ACF 中插入变量 id
- python-3.x - 如何将熊猫行中的元素解析为创建新列的方法?
- mysql - 应用 MySql 后删除 Insert Into Table 语句
- python - Plotting two data with greater difference
- javascript - Jest - 描述块的顺序执行
- firebase - 如何将 Firebase 集成到 Ionic 项目(android/iOS)中?
- java - 将本地化用户输入映射到 Android 中的内部值的最佳实践?