【++*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″ 。
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
推荐阅读
- 进程和用户级别线程之间有什么区别()
- PIC与MSP430之间有哪些区别()
- PIC和ARM之间有什么区别()
- C++ STL Multiset与Multimap中的pair有什么区别()
- NodeJS和AngularJS之间有哪些区别()
- 多任务和多处理之间有什么区别()
- 多重处理和多重编程之间有什么区别()
- # yyds干货盘点 # 手把手教你对抓取的文本进行分词词频统计词云可视化和情感分析
- Flutter组件ValueListenableBuilder使用#yyds干货盘点#