C++中关于二维数组传递的问题 10

代码如下:#include<iostream>usingnamespacestd;voidfn(int**p);voidmain(){inta[2][2]={{1,2},... 代码如下:
#include<iostream>
using namespace std;

void fn(int ** p);

void main()
{
int a[2][2] = {{1,2},{3,4}};
fn( (int ** ) a );

}

void fn(int ** p)
{
cout<<endl;
cout<<"nowing in fn3"<<endl;
cout<<"p : "<< p <<endl;
cout<<"*p : "<< *p <<endl;
cout<<"(int *)p : "<< (int *) p <<endl;
cout<<" **p: "<< * ( (int *) p) <<endl;
cout<<"*(p+1): "<< * (p + 1) <<endl;
cout<<"(int *)(p + 1) : "<< (int *) (p +1)<<endl;
cout<<"* ( (int *) p + 1) : "<< * ( (int *) p + 1) <<endl;
cout<<"* ( (int *) ( p + 1 ) ): "<< * ( (int *) ( p + 1 ) ) <<endl;
}

输出结果如图

问题:
(int *) p 与 *p的区别是什么?
为什么p与(int *)p的结果相同?
为什么* ( (int *) p + 1) 与 * ( (int *) ( p + 1 ) )结果相同?
可以帮忙解释下fn函数当中的所有参数意义进行解释下么(指的是p,*p,(int* p)这些参数)
展开
 我来答
kaixingui2012
2015-01-11 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6503万
展开全部
二维数组传递不能写成这样,正确操作为:
void main()
{
int a[2][2] = {{1,2},{3,4}};
int *b[2]={a[0],a[1]};
fn( b ); //这样才合理!!直接引用a需要用数组指针才可以!
}
追问
void fn2(int ** a,int n,int m)
{
for(int count = 0; count < 2; count++)
{
for(int count1 = 0; count1 < 2; count1++)
{
cout<<*((int*)a + count * m +count1)<<" ";
}
}
}
这段代码可以正常的编译,并且可以正常的输出数组,这是为什么,谢谢了
追答
你这个编译会报警告!
fn2中,收到的a的值是main中数组a的首地址,这个地址值,无论是按几维来传都是固定的值。
之所以,你能正确输出数组数据,是因为:
1、数组是连续存储的,即a[2][2] 存储的数据与a[4]是相同的
2、你把a强制转换成了一维指针,并采用地址偏移的方式去访问数据
因此,你可以得到正确的数据
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式