1.*取值运算符与++运算的优先级问题。
++的优先级要高于*,所以两者运算的结果是一样的,也就是加括号和不加括号是效果是一样的。
2.举个例子
int main()
{
char *ptr=''hello''
printf("%c\n",*ptr);
printf("%c\n",*ptr++);
printf("%c\n",*(++ptr));
printf("%c\n",*(ptr+1));
}
屏幕输出的结果:h,h,l,l
3. char *ptr=''hello''
ptr是一个指向字符型的指针,存放的是字符串“hello”中的第一个字符h的地址,并不是整个字符串。
我们来分析第一个输出*ptr,意思直接取出ptr的值也就是h。
第二个输出*ptr++,这个结合先运算地址ptr++,在就是取值运算*。ptr++运算结果应该是先引用后地址加1,当前ptr指向的是字符串的第一个字符的位置,在运算取值运算取出当前地址的值,也就是h,之后地址自增,指针指向下个字符e。
第三个输出*(++ptr),和第二个类似先运算括号内的地址运算++ptr ,在从地址中取值。++ptr是地址先加1然后在参加运算,由于第二步的时候指针已经指向第二个字符e地址,所以经过运算++ptr之后指针指向下个字符地址,在取值运算得到l。
第四个输出*(ptr+1)是输出当前ptr指向地址+1地址的值,也就是第二个l。