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