吾爱程序员:这里有好玩的游戏和软件
当前位置:首页C语言教程 → ++*p、*p++ 和 *++p 之间的区别

++*p、*p++ 和 *++p 之间的区别

来源:网络 | 更新时间:2022-01-10 19:00:46
预测以下 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 ”。    

最新文章

热点资讯

手游排行榜

CopyRight 2020-2030吾爱程序员

鄂ICP备2021004581号-8

本站资源收集于网络,如有侵权请联系我们:35492删除0109@qq.com