首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求见教-矩阵通过交换行首指针来交换行,出错…

2012-11-07 
求指教----矩阵通过交换行首指针来交换行,出错……C/C++ code#includeiostream#includevector#includee

求指教----矩阵通过交换行首指针来交换行,出错……

C/C++ code
#include<iostream>#include<vector>#include"exchange.cpp"using namespace std;void exchange(int **m,int **n)        {    int *p;     p=*m;    *m=*n;    *n=p;}void main(){    int row=3,column=3;    int **a;    a=(int **)malloc(sizeof(int*)*row);                for(int i=0;i<row;i++)        a[i]=(int*)malloc(sizeof(int)*column);    int x=1;    for(int i=0;i<3;i++)        for(int j=0;j<3;j++)        {            a[i][j]=x;            x++;        }    exchange(&a[0],&a[1]);    for(int i=0;i<3;i++)    {        for(int j=0;j<3;j++)        {            cout<<a[i][j]<<"    ";        }        cout<<endl;    }    system("pause");}


这是一个可以成功运行的程序,但是如果将矩阵a的定义改为使用vector实现的动态数组,vector<vector<int> >m(row,vector<int>(column)); 或者直接改为a[3][3]; 则调用后面的exchange函数时,出于出现函数参数无法传递的报错,不知原因,求哥哥姐姐们指教一二~~谢谢了~~ 


[解决办法]
vector<vector<int> >m(row,vector<int>(column));
m[0] 是一个vector<int>对象,
&m[0] 是取该对象的地址,类型是vector<int> *,该类型和int **不匹配。

a[3][3]
a[0] 是一个的数组,类型int d[3];
&a[0] 是取一个d[3]数组的地址,类型为int (*)[3],该类型和int **类型不匹配。
int (*p)[3] = &a[0];




 
[解决办法]
明确上述内容后,你可以这样做
int **p;
int *q=(int*)malloc(sizeof(int*));//确定一个一级指针
p=&q;//二级指针指向一级指针
*p=*m;

热点排行