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

如题所述

你好!!!
首先我们看看形参:(*b)[2]是个数组指针,即指针b是指向2个某一类型的元素的指针
要是是实参是:a[1][2],即一个函数2个元素的数组,形参是:(*b)[2],即把一维数组的首地址赋值给数组指针b,使指针指向一维数组的一个元素;
那么b[1]等价于*(b+1)即使数组的第2个元素的地址不是值,
而(*b)[1]等价于b[0+1][0]即第2个元素的是:

#include<iostream>
using namespace std;

void fun(int (*b)[2])
{
cout<<b[1]<<endl;
cout<<(*b)[1]<<endl;
cout<<*(b+1)<<endl;

}

void main()
{

int a[1][2]={3,5};
fun(a);
}

结果:
0012FF80
5
0012FF80
Press any key to continue
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-18
你好,首先需要解释一下(*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]。本回答被提问者采纳