首页 > 解决方案 > 为什么在 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;
 }

如果有人能解释详细声明数组时会发生什么,那就更好了。以及为什么在所有算术运算中只有“+”和“-”有效,“*”或其他无效。

标签: c++carrayspointersoperators

解决方案


需要注意的几点:

  1. 替换int mainint main()(正确声明函数)
  2. 替换int x={2,3,4,5,6}int x[]={2,3,4,5,6};(正确声明数组)
  3. 数组不能递增,但指向数组的指针可以。(见下文)
  4. 我假设您要打印数组第一个元素的 VALUE,而不是第一个元素的 ADDRESS。
  5. 确保以分号结束所有行。
  6. 从技术上讲,该main功能应return 0在成功完成后完成。

综上所述,下面的代码应该可以做到这一点。

int main() {
    int *y, x[] = {2,3,4,5,6};
    y = x;
    cout << *y++;
    return 0;
}

现在,逐行检查

  1. 声明一个指向 int ( y) 的指针,声明一个 int 数组 ( x),并初始化该数组。
  2. 设置y为等于x(即将数组的地址存储在 中y)。
  3. 取消引用y(即获取该地址处整数的值),打印它,然后递增y以指向x.

推荐阅读