这是未定义的行为还是正常输出

pra*_*pta 3 c gcc sequence-points

这是一个非常简单的问题,但在序列点上甚至有一些疑问.

int a[3] = {1,2,4};
printf("%d",++a[1]);
Run Code Online (Sandbox Code Playgroud)

O/P

3
Run Code Online (Sandbox Code Playgroud)

这是一个有效的c语句,我得到输出3,这意味着它是相同的

++(a[1])
Run Code Online (Sandbox Code Playgroud)

但是这是如何可能的,因为我们有一个预增量运算符,必​​须先递增第a一个,然后必须发生解除引用.

请纠正我的疑问.我们怎么样3

hac*_*cks 7

行为定义明确.运算符的[]优先级高于前缀++运算符.因此操作数a将绑定到[].它将被解释为

printf("%d", ++(a[1]));
Run Code Online (Sandbox Code Playgroud)