若实参为a[1][2],形参为(*b)[2],则b[1]、(*b)[1]、*(b+1)分别是什么意思呢?

来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/17 16:02:57
若实参为a[1][2],形参为(*b)[2],则b[1]、(*b)[1]、*(b+1)分别是什么意思呢?若实参为a[1][2],形参为(*b)[2],则b[1]、(*b)[1]、*(b+1)分别是什么

若实参为a[1][2],形参为(*b)[2],则b[1]、(*b)[1]、*(b+1)分别是什么意思呢?
若实参为a[1][2],形参为(*b)[2],则b[1]、(*b)[1]、*(b+1)分别是什么意思呢?

若实参为a[1][2],形参为(*b)[2],则b[1]、(*b)[1]、*(b+1)分别是什么意思呢?
首先需要解释一下(*b)[2]的意思.
假设数据类型为int,则 int (*b)[2]的意思为,声明一个指向两个长度的整形数组的指针.
int a[2][2] = { {1,2},{3,4} }; \\我认为数组a应该是a[2][2],否则访问b[1]等会越界.
则将a[2][2]传入方法:
void fun(int (*b)[2])
{
...
}
b[0],为一个长度为2的数组,指向数据1,2,&b[0]的值为数据1的地址;
b[1],为一个长度为2的数组,代表指向数据3,4,&b[1]的值为数据3的地址;
(*b)[1]:首先看(*b)是将b解引用,我们得到一个长度为2的数组,数据为1和2,然后看(*b)[1]即访问下标为1的元素,即2;
*(b+1),由指针的特性我们知道,*(b+1)其实这等价于b[1].