个性化阅读
专注于IT技术分析

++*p、*p++和*++p之间有什么区别?

预测以下C程序的输出。

//PROGRAM 1
#include <stdio.h>
int main( void )
{
     int arr[] = {10, 20};
     int *p = arr;
     ++*p;
     printf ( "arr[0] = %d, arr[1] = %d, *p = %d" , arr[0], arr[1], *p);
     return 0;
}
//PROGRAM 2
#include <stdio.h>
int main( void )
{
     int arr[] = {10, 20};
     int *p = arr;
     *p++;
     printf ( "arr[0] = %d, arr[1] = %d, *p = %d" , arr[0], arr[1], *p);
     return 0;
}
//PROGRAM 3
#include <stdio.h>
int main( void )
{
     int arr[] = {10, 20};
     int *p = arr;
     *++p;
     printf ( "arr[0] = %d, arr[1] = %d, *p = %d" , arr[0], arr[1], *p);
     return 0;
}

记住以下有关后缀++, 前缀++和*(取消引用)运算符的简单规则, 可以轻松猜出上述程序和所有此类程序的输出。

1)前缀++和*的优先级相同。两者的关联性是从右到左。

2)后缀++的优先级高于*和前缀++。后缀++的关联性从左到右。

(参考:优先表)

表达方式++ * p有两个优先级相同的运算符, 因此编译器会寻找同化性。操作员的关联性从右到左。因此该表达式被视为++(* p)。因此, 第一个程序的输出为”arr [0] = 11, arr [1] = 20, * p = 11″。

表达方式* p ++被视为*(p ++) 因为后缀++的优先级高于*。因此, 第二个程序的输出是”arr [0] = 10, arr [1] = 20, * p = 20″。

表达方式* ++ p有两个优先级相同的运算符, 因此编译器会寻找同化性。操作员的关联性从右到左。因此该表达式被视为*(++ p)。因此, 第三个程序的输出为”arr [0] = 10, arr [1] = 20, * p = 20″。

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

赞(1)
未经允许不得转载:srcmini » ++*p、*p++和*++p之间有什么区别?

评论 抢沙发

评论前必须登录!