2014-01-19 134 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