2014-01-19 152 views
0

我正在尝试编写2个函数,它们使用一个指针来迭代am * n矩阵,以便按元素交换行和列元素。交换行的函数出现的很好另我似乎不能推测它out.The输出,当我尝试交换柱3和图2,对一个矩阵用指针逐列迭代2d矩阵

 1 2 3 
    1 2 3 
    1 2 3 

是:

1 3 2 
    1 3 2 
    1 2 3 

任何建议将是非常这里是他们两人的代码:

void interchange_rows(int *p,int n,int r1,int r2){ 
    int temp; 
     for(int i=0;i<n;i++){ 
     temp=*(p+r1*n+i); 
     *(p+r1*n+i)=*(p+r2*n+i); 
     *(p+r2*n+i)=temp; 
    } 
    } 

    void interchange_columns(int *p,int n, int c1,int c2){ 
     int temp; 
     for(int i=0;i<n;i++){ 
     temp=*(p+(i*n)-c1); 
     *(p+(i*n)-c1)=*(p+(i*n)-c2); 
     *(p+(i*n)-c2)=temp; 
     } 
     } 

回答

0

您应该加上c1和c2而不是减号。

void interchange_columns(int *p,int n, int c1,int c2){ 
    int temp; 
    for(int i=0;i<n;i++){ 
     temp=*(p+(i*n)+c1); 
     *(p+(i*n)+c1)=*(p+(i*n)+c2); 
     *(p+(i*n)+c2)=temp; 
    } 
} 
+0

,当我尝试换3和1,但是当我尝试换3和2你是如何初始化矩阵,你是如何调用该函数它给了我一个错误 – Georgiana

+0

的作品?请粘贴代码。 interchange_columns((int *)a,3,2,1)在这里效果很好,a定义为[3] [3] = {{1,2,3},{1,2,3},{1, 2,3}} –

+0

'interchange_columns(arr,dim,c1,c2)'其中arr是指向动态分配数组的指针,dim-是维度(它是一个方形矩阵),c1和c2是给定的列由用户。还有一个先决条件:if((c1 <= dim)&&(c2 <= row)&&(c1> = 0)&&(c2> = 0))''。它适用于交换列1和2以及2和3,但它是:当检测到1和3时出现“检测到堆损坏”。 – Georgiana