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)这些参数) 展开
#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)这些参数) 展开
1个回答
展开全部
二维数组传递不能写成这样,正确操作为:
void main()
{
int a[2][2] = {{1,2},{3,4}};
int *b[2]={a[0],a[1]};
fn( b ); //这样才合理!!直接引用a需要用数组指针才可以!
}
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强制转换成了一维指针,并采用地址偏移的方式去访问数据
因此,你可以得到正确的数据
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询