易百教程

27、表达式 *++ptr++*ptr 是否相同?

这两种表达方式不同。 下面来看一个示例代码来了解这两个表达式之间的区别。

示例1:

#include <stdio.h>
int main(void)
{
    int aiData[5] = {100,200,30,40,50};
    int *piData = aiData;
    ++*piData;
    printf("aiData[0] = %d, aiData[1] = %d, *piData = %d", aiData[0], aiData[1], *piData);
    return 0;
}

输出:

101 , 200 , 101

解释:
在上面的示例中,涉及两个运算符,并且都具有相同的优先级,具有从右到左的关联性。 所以上面的表达式 ++*p 等价于 ++ (*p)。 换句话说,它是值的预增量,输出是 101、200、101。

示例2:

#include <stdio.h>
int main(void)
{
    int aiData[5] = {100,200,30,40,50};
    int *piData = aiData;
    *++piData;
    printf("aiData[0] = %d, aiData[1] = %d, *piData = %d", aiData[0], aiData[1], *piData);
    return 0;
}

输出:

100、200、200

解释:
在上面的示例中,涉及两个运算符,并且它们具有相同的从右到左关联性的优先级。 所以上面的表达式 *++p 等价于 *(++p)。 换句话说,它是地址的预增量,输出是 100, 200,200。