指针++*ptr++如何求值

问题描述 投票:0回答:1

所以我很困惑如何不首先评估后增量。 (根据优先级,后递增优先。)有人可以解释一下吗?

考虑下面给出的代码:

int main()
{
    char arr[] = "iitbforgoodlife";
    char *ptr = arr;
    
    while(*ptr != '\0')
        ++*ptr++;
    
    printf("%s %s", arr, ptr);
    
    getchar();
    return 0;
}

输出为:

jjucgpshppemjgf

c pointers data-structures
1个回答
0
投票

后自增作为主要表达式运算符,具有最高优先级。但新值直到序列点完成后才会生效,因此指针变量在此之前保持其原始值。

接下来是一元运算符

*
,它取消引用指针以返回底层对象,该对象是数组
arr
中的一个字符。

最后是预自增运算符,也是一元运算符,与

*
具有相同的优先级。但是,它会在稍后计算,因为这些运算符是从右到左计算的。因此,预增量应用于由
*
运算符生成的对象。

© www.soinside.com 2019 - 2024. All rights reserved.