求见教-矩阵通过交换行首指针来交换行,出错…
求指教----矩阵通过交换行首指针来交换行,出错……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;