阅读并预测以下C程序的输出。
程序-1
// 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;
}
程序-2
// 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;
}
程序-3
// 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;
}
记住以下有关后缀++
,前缀++
和*
(取消引用)运算符的简单规则,可以轻松猜出上述程序和所有此类程序的输出。
- 前缀
++
和*
的优先级相同,两者的关联性是从右到左。 - 后缀
++
的优先级高于*
和前缀++
。 后缀++
的关联性从左到右。
表达式++ * 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
。
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:++*p, *p++ 和*++p
本文链接:https://www.vsdiffer.com/vs/++p-vs-p++vs++p.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。