详解C++语言中的加法运算符与赋值运算符的用法

2020-01-06 14:27:18于海丽

  • 算术 + 算术
  • 标量 + 整数
  • 整数 + 标量
  • 算术 – 算术
  • 标量 – 标量

    请注意,加法和减法不是等效运算。

    
    // expre_Additive_Operators.cpp
    // compile with: /EHsc
    #include <iostream>
    #define SIZE 5
    using namespace std;
    int main() {
      int i = 5, j = 10;
      int n[SIZE] = { 0, 1, 2, 3, 4 };
      cout << "5 + 10 = " << i + j << endl
         << "5 - 10 = " << i - j << endl;
    
      // use pointer arithmetic on array
    
      cout << "n[3] = " << *( n + 3 ) << endl;
    }
    
    

    指针加法
    在加法运算中,如果其中一个操作数是指向对象数组的指针,则另一个操作数必须是整型。结果为与原始指针类型相同的指针和指向另一个数组元素的指针。以下代码片段阐述了此概念:
    short IntArray[10]; // Objects of type short occupy 2 bytes
    short *pIntArray = IntArray;

    
    for( int i = 0; i < 10; ++i )
    {
      *pIntArray = i;
      cout << *pIntArray << "n";
      pIntArray = pIntArray + 1;
    }
    

    虽然将整数值 1 添加到 pIntArray,但这并不表示“将 1 添加到该地址”,而是指“调整指针使其指向数组中的下一个对象”,而该对象恰好是在 2 字节(或者 sizeof( int ))之外。
    注意
    在 C++ 程序中很少找到 pIntArray = pIntArray + 1 形式的代码;若要实现递增,以下形式更可取:pIntArray++ 或 pIntArray += 1。

    指针减法
    如果两个操作数都是指针,则减法运算的结果就是两个操作数之差(在数组元素中)。减法表达式产生类型 ptrdiff_t(在标准包含文件 STDDEF.H 中定义)的带符号的整数结果。
    其中一个操作数可以是整型,条件是该操作数是第二操作数。减法的结果的类型与原始指针的类型相同。减法的值是指向第 (n – i) 个数组元素的指针,其中 n 是由原始指针指向的元素,而 i 是第二操作数的整数值。

    赋值运算符

    语法

    
        expression assignment-operator expression 
    assignment-operator : one of
      =  *=  /=  %=  +=  –=  <<=  >>=  &=  ^=  |=