++*p,为什么会使指针发生变化

图片说明

using namespace std;
    int main()
{
  char blocks[3] = {'A','B','C'};
   char *ptr = &blocks[0];
   char temp;
   ptr = blocks;cout<<*ptr;     
   temp = *++ptr;cout<<endl<<temp;      
   temp = ++*ptr;cout<<endl<<temp;      
   temp = *ptr++;   cout<<endl<<temp;
   temp = *ptr; cout<<endl<<temp;       
   return 0;
}

第11行的++*ptr操作后,按道理应该先*ptr,再将这里面的值++,并不改变指针值才对。就是ptr仍是指向字符'B'的。那么第12行的*ptr++,应该输出字符'B’,然后再指针向后移一位,可是为什么编译运行后输出的是'C'呢?

你这句

temp = ++*ptr;cout<<endl<<temp; 

已经改变了'B'的值,把它变成了'C',数组也变成了{'A','C','C'},后面怎么可能再输出'B'?

学会用调试吧。

++ *ptr 相当于 ++ (*ptr) ,指针ptr对应的变量+1。

*ptr ++ 相当于 * (ptr++) ,指针ptr,也就是地址值 +1

问题解决还盼采纳一下,昨天的问题解决了没有

对++运算符理解有误,temp=++ptr这个表达式的含义是,在整个表达式运行之前(就是在解引用之前),对ptr指向的那个变量内容自动加1,所以在第一次给temp赋值前数组第一个元素已经完成自动加1,变成字符B了,如果放后边ptr++,第一次读取temp就是字符A了,就是整个表达式运行完(赋值结束)之后第一个元素自动加1