C 如何将数组变量用作指针?

C 如何将数组变量用作指针?,c,C,这与测试[3]如何相同? 我知道数组变量可以用作指向第一个元素的指针,也可以用来引用或指向数组中的其他变量,但是这个语句如何正确呢?3在这里不是一个数组变量。这个想法是test[3]实际上被认为是*(test+3),这与*(3+test)相同,因为+的3和test通勤。因此,3[测试]也是可能的。无论您编写它是*(3+test)还是*(test+3)还是test[3]和3[test],都没有关系 从C11标准 后缀表达式后跟方括号[]中的表达式是数组对象元素的下标指定。下标运算符[]的定义是E1

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

这个想法是
test[3]
实际上被认为是
*(test+3)
,这与
*(3+test)
相同,因为
+
3
test
通勤。因此,
3[测试]
也是可能的。无论您编写它是
*(3+test)
还是
*(test+3)
还是
test[3]
3[test]
,都没有关系

从C11标准

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


E1[E2]
确实是
*((E1)+(E2))
我们知道二进制加法是。所以我们可以说它和
*((E2)+(E1))
一样,所以我们不能把它写成
E2[E1]
。是的,我们可以,这是合法的。

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

因为
test[3]
*(test+3)
*(3+test)
x[y]
*(x+y)
的缩写,
+
是可交换的,与
*(y+x)
其中的
y[x]
是速记。我不太明白这个通勤问题。你能再解释一下吗?@Nalin你在数学课上睡觉了吗?加法是可交换的,意思是顺序不重要。
1+5
等于
5+1
。在处理指针算术时(涉及指针时的算术)同样适用。@Pablo是的,我知道。我只是对[]的用法感到困惑。
int test[] = {1,2,3,4};

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