[array name]在C语言中的含义是什么? #包括 int main() { int数组[3][3]={1,2,3,4,5,6,7,8,9}; printf(“%d\n”,数组[1][2]);//2 printf(“%d\n”,(-1)[array][5]);//3 printf(“%d\n”,-1[array][5]);//-9 返回0; }

[array name]在C语言中的含义是什么? #包括 int main() { int数组[3][3]={1,2,3,4,5,6,7,8,9}; printf(“%d\n”,数组[1][2]);//2 printf(“%d\n”,(-1)[array][5]);//3 printf(“%d\n”,-1[array][5]);//-9 返回0; },c,C,[array]的含义是什么?为什么是产出3-9? 谢谢大家! 在C中,给定两个表达式E1和E2,语法为: E1[E2] 完全等同于: E2[E1] 1) 数组存储在连续内存中2)阅读指针算术。虽然重复的数组回答了一个奇怪的符号问题,即array[index]也等于index[array],但您的代码中确实包含一些其他东西,这些东西会使您在超出数组边界时出现不好的、技术上未定义的行为。你在哪里找到这个例子的?请不要再使用那个源代码了。@Someprogrammerdude代码哪里超出了界限?

[array]的含义是什么?为什么是产出3-9? 谢谢大家!

在C中,给定两个表达式
E1
E2
,语法为:

E1[E2]
完全等同于:

E2[E1]

1) 数组存储在连续内存中2)阅读指针算术。虽然重复的数组回答了一个奇怪的符号问题,即
array[index]
也等于
index[array]
,但您的代码中确实包含一些其他东西,这些东西会使您在超出数组边界时出现不好的、技术上未定义的行为。你在哪里找到这个例子的?请不要再使用那个源代码了。@Someprogrammerdude代码哪里超出了界限?所有这三个示例都会在给定数组的边界内生成一个地址
[1][2]
相当于
[0][3-2]
[1][5]
相当于
[0][5-3]
[1][5]
[2][5-3]
@glglglgl
数组是三个
int
数组中的三个数组。这意味着
array[1]
是一个由三个
int
组成的数组。索引
-2
超出该数组的范围。是的,对于整个
array
,它是内存的“界限”,但是对于
array[1]
它是超出界限的。索引
5
-1
也一样。如图所示的代码很糟糕,在IMO中没有显示任何有用的内容。数组值将从作为数组的头地址计算,因为它是一个指针,而不是
Array[i][j]=*(Array+(i*(n)+j)sizeof(type))
。所以在情况1 array+1*3-2中,即array+1,这个地址的值是2。但使用负指数是一种非常糟糕的做法