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