加法运算符:+ 和 -
语法
expression + expression expression expression
备注
相加运算符为:
这些二进制运算符具有从左至右的关联性。
相加运算符采用算术或指针类型的操作数。加法 (+) 运算符的结果是操作数之和。减法 ( ) 运算符的结果是操作数之差。如果一个操作数是指针或两个操作数都是指针,则它们必须是指向对象的指针,而不是指向函数的指针。如果两个操作数都是指针,则结果没有意义,除非它们是指向同一数组中的对象的指针。
相加运算符采用 arithmetic、integral 和 scalar 类型的操作数。下表定义了这些操作数。
用于相加运算符的类型
S.N. | 构造函数 & 描述 |
---|---|
arithmetic | 整型和浮点类型统称为“算术”类型。 |
integral | 所有大小(long、short)和枚举数的 char 和 int 类型为“整数”类型。 |
scalar | 标量操作数是算术类型或指针类型的操作数。 |
请注意,加法和减法不是等效运算。
// expre_Additive_Operators.cpp// compile with: /EHsc#include <iostream>#define SIZE 5using 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 = *= /= %= += = <<= >>= &= ^= |=
备注
赋值运算符将值存储在左操作数指定的对象中。有两种赋值操作:简单赋值,其中第二个操作数的值存储在第一个操作数指定的对象中;复合赋值,其中先执行算术、移位或位运算,然后再存储结果。下表中除 = 运算符之外的所有其他赋值运算符都是复合赋值运算符。
赋值运算符
运算符 | 含义 |
---|---|
= | 整型和浮点类型统称为“算术”类型。 |
*= | 所有大小(long、short)和枚举数的 char 和 int 类型为“整数”类型。 |
/= | 标量操作数是算术类型或指针类型的操作数。 |
%= | 整型和浮点类型统称为“算术”类型。 |
+= | 所有大小(long、short)和枚举数的 char 和 int 类型为“整数”类型。 |