二维数组形参传递问题
在传递二维数组的时候我使用了指针的强制类型转换来测试打印功能,可是我发现在函数中并没有按照我写的那样去做,只是第一行打印正确,请问各位为什么?
源码如下:
#include <iostream>
#include <string>
using namespace std;
void select_min(int** a_time,int m,int n){
for(int i=0;i <m;++i)
{
for(int j=0;j <n;++j)
{
cout < <*((int*)(a_time+i)+j) < <endl;
}
}
return ;
}
int main(){
int all_time[100][100];
int i,j;
int m=2;
int n=2;
for(i=0;i <m;i++)
{
for (j=0;j <n;j++)
{
all_time[i][j]=i*2+j;
}
}
for(i=0;i <2;++i)
{
for(j=0;j <n;++j)
{
cout < <*((int*)(all_time+i)+j) < <endl;
}
}
select_min((int**)all_time,m,n);
system( "pause ");
return 0;
}
[解决办法]
cout < <*((int*)(all_time+i)+j) < <endl;
改为:
cout < <*((int*)(all_time+i*(sizeof(int)*100))+j) < <endl;
这个做法比较危险 ,: )
[解决办法]
#include <iostream>
#include <string>
using namespace std;
void select_min(int* a_time,int m,int n){
//转换为一维数组
for(int i=0;i <m;++i)
{
for(int j=0;j <n;++j)
{
cout < <*((a_time+i*100)+j) < < " ";//形参数组对应的实参数组的第二维参数
}
cout < <endl;
}
return ;
}
void select_min1(int a_time[][100],int m,int n){
//如果要用多维数组,除第一位以外的数组维数必须给出
for(int i=0;i <m;++i)
{
for(int j=0;j <n;++j)
{
cout < <a_time[i][j] < < " ";
}
cout < <endl;
}
return ;
}
int main(){
int all_time[100][100];
int i,j;
int m=2;
int n=2;
for(i=0;i <m;i++)
{
for (j=0;j <n;j++)
{
all_time[i][j]=i*2+j;
}
}
for(i=0;i <m;++i)
{
for(j=0;j <n;++j)
{
//cout < <*((int*)(all_time+i*100)+j) < <endl;
cout < <all_time[i][j] < < " ";//有数组的形式
}
cout < <endl;
}
select_min(&all_time[0][0],m,n);
select_min1(all_time,m,n);//这两者效果一样
system( "pause ");
return 0;
}
[解决办法]
void select_min(int** a_time,int m,int n){
for(int i=0;i <m;++i)
{
for(int j=0;j <n;++j)
{
long pos=(long)a_time+(i*100*sizeof(int)+j*sizeof(int));//得到数组元素地址
int val;
memcpy(&val,(int**)pos,sizeof(int));//把该地址的int复制到变量中
cout < <val < < " ";//输出
}
cout < <endl;
}
return ;
}