bee*_*hnu 8 c arrays pointers multidimensional-array
下面是二维数组的示例.
int s[5][2] = {
{0, 1},
{2, 3},
{4, 5},
{6, 7},
{8, 9}
};
int (*p)[2];
Run Code Online (Sandbox Code Playgroud)
如果我写,p = &s[0];那就没有错误.但是如果我写的p = s[0];是有错误,即使&s[0]并且s[0]会给出相同的地址.
请告诉我为什么会有不同之处,即使两者都给出相同的地址.
eca*_*mur 15
地址相同,但类型不同.
&s[0]是类型int (*)[2],但是s[0]类型int [2],腐朽到int *.
结果是,在执行算术运算时p,它遍历数组的模式将取决于其类型.如果您编写p = &s[0]然后访问p[3][1],则表示您正在访问s[3][1].另一方面int *q = s[0],如果您编写,则只能用于q访问s例如q[1]将访问的第一个子阵列s[0][1].