表达式 ptr++ 和 ++ ptr 相同吗?

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

#include <stdio.h>
int main(void)
{
    int aiData[5] = {100,200,30,40,50};

    int *ptr = aiData;

    *ptr++;

    printf(aiData[0] = %d, aiData[1] = %d, *piData = %d, aiData[0], aiData[1], *ptr);

    return 0;
}

运行上面代码,得到以下结果:

 100, 200, 200

解释:
在上面的示例中,涉及到两个运算符,并且都具有不同的优先级。 post ++ 的优先级高于 *,所以第一个 post ++ 将先执行,上面的表达式,*p++ 将等价于 *(p++)。 换句话说,它是地址的后增量,所以输出是: 100、200、200。

示例代码2:

#include <stdio.h>
int main(void)
{
    int aiData[5] = {100,200,300,400,500};
    int *ptr = aiData;
    ++*ptr;
    printf(aiData[0] = %d, aiData[1] = %d, *ptr = %d, aiData[0], aiData[1], *ptr);
    return 0;
}

运行后输出结果为:

101 , 200 , 101

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

相关文章

在C语言中声明变量:变量声明仅在编译时向编译器提供以给定类...
全局变量和静态全局变量有不同的联系。 这就是全局变量可以在...
存储类决定程序中变量或函数的范围(生命周期)和范围(可见性)...
在C语言中,外部静态变量有内部链接,内部静态变量没有链接。...
让我们先来看一下 typedef 和宏的简短描述,以了解它们之间的...
编译器错误。 解释:typedef 已被视为部分存储类,因此不能一...