指向数组的指针的地址

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].