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

【++*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″ 。
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

    推荐阅读