【发布时间】:2016-03-09 02:40:04
【问题描述】:
在使用指针访问二维数组方面我需要一些帮助。
我有 8 个这样声明的全局字符数组:
char s1[4][16], s2[4][16], ... , s8[4][16];
它们的值稍后在 main 函数中设置。
我有一个包含 8 个指向这些数组的指针的数组,
char (*s[8])[4][16];
这个数组中的每个指针都是这样分配的:
s[0] = &s1;
s[1] = &s2;
..
..
s[7] = &s3;
现在访问 s1 的元素,
我做*s[0][i][j],但是我没有得到与s1 相同的值。 s2、s3 等也是如此。
谁能告诉我出了什么问题?
【问题讨论】:
-
你忘记了括号,所以分组是错误的。请记住,声明符与访问变量的表达式具有相同的语法,因此如果声明符需要括号,那么访问变量的表达式也需要。
-
另一种选择是
char (*s[8])[16]; 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 (*)[16]不兼容的类型char (*)[4][16]。但是s1衰减后的类型为char (*)[16]。
标签: c arrays pointers multidimensional-array