若实参为a[1][2],形参为(*b)[2],则b[1]、(*b)[1]、*(b+1)分别是什么意思呢?
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/26 03:05:56
![若实参为a[1][2],形参为(*b)[2],则b[1]、(*b)[1]、*(b+1)分别是什么意思呢?](/uploads/image/z/13854854-38-4.jpg?t=%E8%8B%A5%E5%AE%9E%E5%8F%82%E4%B8%BAa%5B1%5D%5B2%5D%2C%E5%BD%A2%E5%8F%82%E4%B8%BA%EF%BC%88%2Ab%EF%BC%89%5B2%5D%2C%E5%88%99b%5B1%5D%E3%80%81%28%2Ab%29%5B1%5D%E3%80%81%2A%28b%2B1%29%E5%88%86%E5%88%AB%E6%98%AF%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D%E5%91%A2%3F)
若实参为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].