2013-03-16 38 views
0

我遇到了問題。我被要求寫一個轉置矩陣的程序,而不使用[] ...例如,我知道如果它是一維數組,我可以說數組[3]與*(數組+3)相同)...但我怎麼用矩陣做到這一點?在不使用[] C語言的情況下將值掃描到矩陣中

這裏是我的代碼掃描:

void scan_matrix(matrix mat1,int number_of_rows, int number_of_columns) 
{ 
    int row_index,column_index; 
    for(row_index=0;row_index<number_of_rows;row_index++) 
    { 
     printf("Enter the values of row %d\n",row_index); 
     for(column_index=0;column_index<number_of_columns;column_index++) 
      scanf("%d",WHAT GOES HERE?????); 
    } 
} 
+5

這取決於'矩陣'是什麼... – 2013-03-16 14:55:24

+0

一個二維數組。與行和列。如果問題不清楚,我很抱歉。 – 2013-03-16 15:01:15

+1

@OriaGruber如果你不願意使用[],那麼你必須使用*算術 – 2013-03-16 15:09:30

回答

1

如果mat1是一個簡單的指針,那麼這應該爲你做的工作:

for(row_index=0;row_index<number_of_rows;row_index++) 
    { 
     printf("Enter the values of row %d\n",row_index); 
     for(column_index=0;column_index<number_of_columns;column_index++) 
      scanf("%d", (mat1 + row_index*number_of_columns + column_index)); 
    } 

程序使用一個事實,即矩陣(2- d數組)實際上是作爲一維數組存儲在內存中的。

讓作爲2D矩陣:

1 2 3 
4 5 6 

這被存儲在存儲器中作爲:

1 2 3 4 5 6 

所以,正確的變量,通過使用一種方法來映射數組元素的邏輯位置訪問與實際的位置。我們需要的是找出哪些原來是關係:

Pos = Row*Num_Of_Col + Col 
1

如果墊子樣二維int數組:墊[3] [3]

然後scanf函數代碼如下:scanf("%d",(*(mat+row_index)+column_index));

a[3] : *(a+3) 
a[3][3] : (*(a+3)+3) 
相關問題