C 如何将数组变量用作指针?
这与测试[3]如何相同?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在这里不是一个数组变量。这个想法是
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]);