读书人

一个小的有关问题求教

发布时间: 2012-04-05 12:42:39 作者: rapoo

一个小的问题,求教各位高手
//写一个函数,将一个3*3的整型矩阵转置(先用数组写,然后用引用写)
#include<iostream>
using namespace std;
int main()
{
void change(int *k);
int a[3][3];
int m,n;
for(m=0;m<=2;m++)
{
for(n=0;n<=2;n++)
{
cin>>a[m][n];
}
}
int *p;
p=&a[0][0];
change(p);
for(m=0;m<=2;m++)
{
for(n=0;n<=2;n++)
{
cout<<a[m][n];
}
}
return 0;
}
void change(int *k)
{
int m,n;
int temp;
for(m=0;m<=2;m++)
{
for(n=0;n<=2;n++)
{
temp=*(*(k+m)+n);
*(*(k+m)+n)=*(*(k+n)+m);
*(*(k+n)+m)=temp;
}
}
}



最后的这个地方temp=*(*(k+m)+n);
*(*(k+m)+n)=*(*(k+n)+m);
*(*(k+n)+m)=temp;
怎么是错的呢,要怎么样改呢????

[解决办法]
int *p;
p=&a[0][0];//这样定义指针的话,不能像你那样用···

C/C++ code
int main(){    void change(int (*k)[3]);    int a[3][3];    int m,n;    for(m=0;m<=2;m++)    {        for(n=0;n<=2;n++)        {            cin>>a[m][n];        }    }    int (*p)[3] = a;    change(p);    for(m=0;m<=2;m++)    {        for(n=0;n<=2;n++)        {            cout<<a[m][n];        }    }    return 0;}void change(int (*k)[3]){    int m,n;    int temp;    for(m=0;m<=2;m++)    {        for(n=0;n<=2;n++)        {            temp=*(*(k+m)+n);            *(*(k+m)+n)=*(*(k+n)+m);            *(*(k+n)+m)=temp;        }    }}
[解决办法]
你那是指向下一级数组元素的指针要这样写才行!
#include<iostream>
using namespace std;
int main()
{
void change(int *k);
int a[3][3];
int m,n;
for(m=0;m<=2;m++)
{
for(n=0;n<=2;n++)
{
cin>>a[m][n];
}
}
for(m=0;m<=2;m++)
{
for(n=0;n<=2;n++)
{
cout<<a[m][n]<<" ";
}
cout<<endl;
}
int *p;
p=&a[0][0];
change(p);
for(m=0;m<=2;m++)
{
for(n=0;n<=2;n++)
{
cout<<a[m][n]<<" ";
}
cout<<endl;
}
return 0;
}
void change(int *k)
{
int m,n;
int temp;
for(m=0;m<3;m++)
{
for(n=m;n<3;n++)
{
temp=*(k+m*3+n);
*(k+m*3+n)=*(k+n*3+m);
*(k+n*3+m)=temp;
}
}
}

读书人网 >C++

热点推荐