讲*和++同时用于指针时提出了这样的问题:将什么解除引用,将什么递增。
double arr[5]={21.1, 32.8, 23.4, 45.2, 37.4 }; double *pt=arr; //pt指针指向arr[0] 值为 21.1 ++pt; //pt指针指向arr[1] 值为 32.8
前缀运算符的从右到左结合规则意味着
*++p 的含义如下:
先将++应用于pt(因为++位于*的右边)然后将*应用于被递增后的pt--》指针递增
double x=*++pt; //指针+1,指向arr[2] 值为23.4
++*pt 的含义如下:
意味着先取得pt指向的值,然后将这个值再加一 ---》指向的值递增
++*pt; //指向的值+1 23.4+1=24.4
(*pt)++ 的含义如下:
圆括号指出,首先对指针解除引用,得到24.4.然后,运算符++将这个值递增到25.4,pt仍指向arr[2]
(*pt)++;
*p++ 的含义如下:
x=* pt++;
后缀运算符++的优先级更高,这意味着将运算符用于pt,而不是*pt,因此对指针递增。
然而后缀运算符意味着将对原来的地址(&arr[2])而不是递增后的新地址解除引用,因此*pt++的值为arr[2],即25.4,
但该语句执行完毕后,pt的值将为arr[3]的地址。
#include "stdafx.h" #include <iostream> int main() { using namespace std; double arr[5]={21.1, 32.8, 23.4, 45.2, 37.4}; double *pt=arr; ++pt; int a; double x; cout<<*++pt<<endl; cout<<++*pt<<endl; cout<<(*pt)++<<endl; cout<<*pt++<<endl; x=*pt++; cout<<x<<endl; cin>>a; }
注意:指针递增和递减都遵循指针的运算规则,如果pt指向某个数组的第一个元素,++pt将修改pt的值(第一个元素),并指向第二个元素地址(第二个元素值不变)
时间: 2024-10-07 08:38:42