数组变量如何用作指针?

时间:2018-02-12 05:17:16

标签: c

int test[] = {1,2,3,4};

printf("%i",3[test]);

这与test [3]相同怎么样? 我知道数组变量可以用作指向第一个元素的指针,可以用来引用或指向数组中的其他变量,但这个语句是如何正确的? 3这里不是数组变量。

2 个答案:

答案 0 :(得分:2)

这个想法test[3]实际上被视为*(test+3),与*(3+test)相同,因为+3通勤test左右。因此3[test]也是可能的。如果您将其写为*(3+test)*(test+3)test[3]3[test],则无关紧要。

来自6.5.2.1p2 C11标准

  

后缀表达式后跟方括号[]中的表达式是数组对象元素的下标名称。 下标运算符[]的定义是E1[E2](*((E1)+(E2))) 相同。由于适用于binary +运算符的转换规则,如果E1是数组对象(等效地,指向数组对象的初始元素的指针)并且E2是整数,则E1 [E2]指定E2的第E2个元素。 E1(从零开始计算)。

E1[E2]确实是*((E1)+(E2)),我们知道二进制加法是commutative。我们可以说它与*((E2)+(E1))相同,因此我们无法将其写为E2[E1]。是的,我们可以,这是合法的。

答案 1 :(得分:0)

使用%i%d时,它指定带符号的十进制整数。然后,为该整数分配的值由3[test]表示。因此,%i表示数组的第4个元素的值(因为数组指针以0开头)