结论
前缀++和后缀++和*的优先级相等,遵循从右到左的运算
其中后缀++较为特殊,它是在当句代码中的运算结束并输出值后才进行的
比如现在有一个数组arr,并赋值给一个指针t
int arr[] = {40,60,50};
int *t = arr;
对于这些乱七八糟的怎么个理解
*t++;
*(t++);
(*t)++;
++*t;
++(*t);
*++t;
*(++t);
以下全部使用cout << … << endl;进行输出
*t++; // 结果为10 指针往后移一位 === 根据优先级虽然是后缀++优先也就是t++指针后移,但是因为它的特点,只会在输出后才进行
*(t++); // 结果为10 指针往后移一位 === 与上面同等,根据优先级虽然是后缀++优先,但因为它的特点,所以是输出后,才进行t++也就是指针后移
(*t)++; // 结果为10 指针指向的值++自增变为了11 === 因为当前*t的值和引用地址元素的值是同一个东西,所以无论是对谁自增,都会对其他引用的会有影响
++*t; // 结果为11 指针无变化 == 因为是自增所以最终也会修改实际的值
++(*t); // 结果为11 指针无变化 == 与上面同等,根据优先级也都是先执行*t
*++t; // 指针后移一位 结果为20 == 根据优先级先执行++t,也就是指针往后移动一位,然后解除引用
*(++t); // 指针后移一位 结果为20 == 与上面同等,根据优先级也是先执行++t