可以将递增运算符用于指针和基本变量。本书前面介绍过。将递增运算符用于指针时。将把指针的值增加其指向的数据类型占用的字节数,这种规则适用于对指针递增和递减。
double arr[5] = {1.1, 2.1, 3.1, 4.1, 5.1};
double *ptr = arr;
++ptr;
也可以结合使用这些运算符和*运算符来修改指针指向的值。将*和++同时用于指针时提出了这样的问题:将什么接触引用,将什么递增。这取决于运算符的位置和优先级。前缀递增,前缀帝建和解除引用运算符的优先级相同。以从右到左的方式进行结合。后缀递增和后缀递减的优先级相同。但比前缀运算符的优先级高,这两个运算符以从左到右的方式进行结合。
前缀运算符的从右到左的结合规则意味着:
double arr[5] = {1.1, 2.1, 3.1, 4.1, 5.1};
double *ptr = arr; // ptr当前指向arr[0]
*++ptr的含义如下:先将++应用与ptr,然后将*应用与被递增后的ptr.
++*ptr的含义如下,先取得ptr指向的值,然后将这个值加1.
(*ptr)++ 圆括号指出,首先对指针解除引用。然后运算符++将这个值递增1
*ptr++ 后缀运算符++的优先级更高,这意味着将运算符用于ptr,而不是*pt,因此对指针递增。
示例源码:
// Len_ptr.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <iostream>
using namespace std;int main()
{double arr[5] = { 1.1, 2.1, 3.1, 4.1, 5.1 };double *ptr = arr;cout << "ptr=" << ptr << ", *ptr=" << *ptr <<" value:";for (int i = 0; i < 5; i++){cout << arr[i] << ", ";}cout << endl << endl;double data1 = *++ptr;cout << "*++ptr =" << data1 << ", ptr=" << ptr << ", *ptr=" << *ptr << " value:";for (int i = 0; i < 5; i++){cout << arr[i] << ", ";}cout << endl << endl;double data2 = ++*ptr;cout << "++*ptr = " << data2 << ", ptr=" << ptr << ", *ptr=" << *ptr << " value:";for (int i = 0; i < 5; i++){cout << arr[i] << ", ";}cout << endl << endl;double data3 = (*ptr)++;cout << "(*ptr)++ =" << data3 << ", ptr=" << ptr << ", *ptr=" << *ptr << " value:";for (int i = 0; i < 5; i++){cout << arr[i] << ", ";}cout << endl << endl;double data4 = *ptr++;cout << "*ptr++=" << data4 << ", ptr=" << ptr << ", *ptr=" << *ptr << " value:";for (int i = 0; i < 5; i++){cout << arr[i] << ", ";}cout << endl << endl;}
执行结果: