gpt4 book ai didi

c - 为什么像(++(*++b))这样的东西是非法的?

转载 作者:行者123 更新时间:2023-11-30 21:13:19 25 4
gpt4 key购买 nike

#include <stdio.h>

int main()
{
int a[3] = {1, 2, 3};
int *b = a;
int c = ++(++(*++b)); /* error: lvalue required as increment operand */
printf("%d", c);

return 0;
}

但以下是合法的:

int c = *++b+1+1;

为什么会存在这样的差异?

最佳答案

下面的 int c = *++b+1+1; 是合法的,因为

  • 有 3 个运算符,即 *+++ 并检查 man 1 运算符 *++ 具有相同的优先级,因此请检查关联性,即 R-->L
  • 所以第一个 *++b 已解决,它是有效的并且给出值 2
  • 现在看起来像 int c = 2+1+1,这也是有效的 C 语句

并且 int c =++(++(*++b)); 是非法的,因为第一个 *++b 被执行,它给出一个值,可以说2(res) 现在你正在执行 ++res ,这会产生一个整数值 3 直到这没问题,接下来当你执行 >++3 无效,因为 ++ 适用于变量而不是常量。所以它给出了左值错误。

关于c - 为什么像(++(*++b))这样的东西是非法的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49810678/

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