gpt4 book ai didi

c - 这个 C 表达式是如何求值的

转载 作者:行者123 更新时间:2023-12-04 11:09:27 25 4
gpt4 key购买 nike

表达式是:

foo = *p++

我正在寻找可以解释这些事情的示例指南/引用。

我理解后缀 ++ 比间接 * 有更高的优先级,所以表达式被解析为

*(p++)

但我正在努力使 GNU C reference manual 中的声明更加清晰第 40 页,上面写着:

这里 p 作为表达式的副作用递增,但 foo 取 *(p++) 的值而不是 (*p)++,因为一元运算符从右绑定(bind)到左。

最佳答案

在C/C++中,Prefix++(或Prefix-)和解引用(*)运算符的优先级相同,Postfix++(或Postfix-)的优先级高于Prefix++和*。

如果 p 是一个指针那么 *p++ 等同于 *(p++) (因为后缀有更高的优先级)

++*p 等价于++(*p)(前缀++ 和 * 都是右结合的)。

*++p 等价于 *(++p) (前缀++ 和 * 都是右结合的)。

你可以看看下面的2个程序来澄清你的疑问。

程序一

#include<stdio.h>
int main()
{
char arr[] = "overflow";
char *p = arr;
++*p;
printf(" %c", *p);
getchar();
return 0;
}
Output: p

程序 2

#include<stdio.h>
int main()
{
char arr[] = "overflow";
char *p = arr;
*p++;
printf(" %c", *p);
getchar();
return 0;
}
Output: v

关于c - 这个 C 表达式是如何求值的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24480779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com