C 指向2D数组的指针数组,读取的值不正确

C 指向2D数组的指针数组,读取的值不正确,c,arrays,pointers,multidimensional-array,C,Arrays,Pointers,Multidimensional Array,我需要一些关于使用指针访问2D数组的帮助 我有8个全局字符数组声明如下: char s1[4][16], s2[4][16], ... , s8[4][16]; s[0] = &s1; s[1] = &s2; .. .. s[7] = &s3; 它们的值稍后在主函数中设置 我有一个数组,有8个指向这些数组的指针 char (*s[8])[4][16]; 此数组中的每个指针的分配方式如下: char s1[4][16], s2[4][16], ... , s8[4][

我需要一些关于使用指针访问2D数组的帮助

我有8个全局字符数组声明如下:

char s1[4][16], s2[4][16], ... , s8[4][16];
s[0] = &s1;
s[1] = &s2;
..
..
s[7] = &s3;
它们的值稍后在主函数中设置

我有一个数组,有8个指向这些数组的指针

char (*s[8])[4][16];
此数组中的每个指针的分配方式如下:

char s1[4][16], s2[4][16], ... , s8[4][16];
s[0] = &s1;
s[1] = &s2;
..
..
s[7] = &s3;
现在要访问s1的元素, 我有
*s[0][I][j]
,但是我没有得到与
s1
相同的值。
s2
s3
等的情况也是如此


有人能告诉你出了什么问题吗?

索引运算符
[]
的优先级高于间接运算符
*
,因此必须使用括号取消对数组指针的引用


尝试执行
(*s[0])[i][j]

您忘记了括号,因此分组错误。记住,声明符与访问变量的表达式具有相同的语法,因此如果声明符需要括号,那么访问变量的表达式也需要括号;s[0]=s1等等,然后您将以
s[0][i][j]
@M.M的身份访问元素。请您解释一下,为什么不使用指针就可以进行常规索引?@zorro所有“数组索引”都使用指针<代码>x[y]表示
*(x+y)
。在实际的解决方案中,如果需要,您可以将
(*s[0])[i][j]
写成
s[0][0][i][j]
。我的建议是去掉四个维度中的第二个维度,因为它只有大小1(即在数组表示法中,四个索引中的第二个总是
[0]
)@zorro
&s1
的类型
char(*)[4][16]
char(*)[16]
不兼容。然而,衰变后的
s1
具有类型
char(*)[16]
.Wow。从没想过。非常感谢你。