最近我一直在学习数组。我发现在声明一个数组并初始化其元素时,有以下方式:
int x[+30];
x[+1]=0;
这让我有些困惑。我理解的概念是,当我们编写代码时,如下所示:
x[n]=0;
那么它的意思是:
*(x+n)=0;
写 x[+1]
的意思是 *(x++1)
,但这似乎是无效的。请纠正我对这个概念理解上的错误。
最近我一直在学习数组。我发现在声明一个数组并初始化其元素时,有以下方式:
int x[+30];
x[+1]=0;
x[n]=0;
*(x+n)=0;
写 x[+1]
的意思是 *(x++1)
,但这似乎是无效的。请纠正我对这个概念理解上的错误。
x[n]
表示 *((x)+(n))
(注意方括号),x[+1]
表示 *((x)+(+1))
。这是有效的。表达式 E1[E2] 的含义(按照定义)等价于 *((E1)+(E2))
+
符号可以充当一元运算符。它通常没有影响,但其结果是在解析数字之前被移除。例如:int x[+30];
被转换为
int x[operator+(30)];
然后变成
int x[30];
x[+1] = 0;
x[1] = 0;
它不会解析为 *(x++1),尤其是因为在c++中这不是有效的语法。
operator+
用于int
参数,它是一个内置运算符。 - TartanLlamaint n = 8 + +9;
这样的表达式,编译器将接受并将其解析为 8 + 9
。 - Xiremaoperator+
无关,只有在参数是类或枚举类型时才考虑operator+
。+
运算符与operator+
不是同一回事。 - TartanLlama
*(x++1)
是无效的,因为++
是一个增量操作符,表达式解析为*((x++)1)
。 - Yuriy Orlov*(x + + 1)
是有效的。这里的重要规则是转换在标记级别上进行,而不是在字符级别上进行。 - MSalters+
只是充当一元+
运算符。 - Xirema