????????可以将递增运算符用于指针和基本变量。本书前面介绍过。将递增运算符用于指针时。将把指针的值增加其指向的数据类型占用的字节数,这种规则适用于对指针递增和递减。
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;
}
执行结果: