2012-10-10 100 views
0

我的教練提出這個slide爲 「矩陣複製」:這段代碼不對嗎?

#define ROWSIZ 17 
#define COLSIZ 27 
int enamatrisen[ROWSIZ][COLSIZ]; 
int andramatrisen[ROWSIZ][COLSIZ]; 

void matcpy (int* dst, int* src) 
{ 
    int i, j; 
    for (i=0; i<ROWSIZ, i=i+1) /* rad-nr */ 
    for (j=0; j<COLSIZ, j=j+1) /* kolumn-nr */ 
    dst[i][j] = src[i][j]; 
} 

1)是錯誤的地方說:,應該;

2)的代碼沒有按不會編譯。 gcc抱怨指針被用作數組或類似的東西。什麼是正確的代碼?這項工作如何接近?難道不應該使用memcpy來代替它,還是這是爲了實現像memcpy之類的東西?

+1

FWIW,而奇怪的,我相信 「」 將這裏的 '正確' 的效果。 –

+0

它是「for(;;)」而不是「((,,)」),所以GCC正確地抱怨逗號。 – EGOrecords

+0

是的,但是插入逗號,仍然可以得到一個有效的循環,但是,最終會出現無限循環,因爲逗號的評估只是序列中的最後一項......您需要額外的代碼在身體中擺脫它。我相信還是值得一提的。 –

回答

3

函數參數定義錯誤。在經過多維陣列

更多信息: http://www.eskimo.com/~scs/cclass/int/sx9a.html

另外,逗號在for迴路應分號。

void matcpy(int dst[][COLSIZ], int src[][COLSIZ]) 
{ 
    int i, j; 
    for (i = 0; i < ROWSIZ; i = i + 1) /* rad-nr */ 
     for (j = 0; j < COLSIZ; j = j + 1) /* kolumn-nr */ 
      dst[i][j] = src[i][j]; 
} 

void matcpy(int (*dst)[COLSIZ], int (*src)[COLSIZ]) 
{ 
    int i, j; 
    for (i = 0; i < ROWSIZ; i = i + 1) /* rad-nr */ 
     for (j = 0; j < COLSIZ; j = j + 1) /* kolumn-nr */ 
      dst[i][j] = src[i][j]; 
} 
+0

非常好,如果我只能通過'COLSIZE'作爲複製本地變量矩陣的參數。我希望你現在理解我的小問題,因爲規範說函數參數應該是指向數組的指針,指向數組的指針,int colsize,int rowsize用於複製任意大小的矩陣。 –

3

是的,這是不正確的。

您需要:

int matcpy(int (*dst)[ COLSIZ ], int (*src)[ COLSIZ ] 

void matcpy(int dst[][ COLSIZ ], int src[][ COLSIZ ]) 

memcpy可以使用,但因爲這是一個鍛鍊,也許關鍵是看如何在二維數組迭代,如何訪問其元素。


for環路,,必須;。其他答案/評論是正確的 - 你可以在表達式中使用逗號,你可能只在for添加;,例如:

//------------------------v 
for (i=0; i<ROWSIZ, i=i+1 ;) 

但這將是不確定的行爲,這是因爲:

  • 的只要i != 0條件i<ROWSIZ, i=i+1將是真實的 - 一個逗號操作符的評價是序列
  • iint在最後一個值,溢出會導致不確定的行爲

換句話說,你可能會以無限循環結束。

+0

@downvoter - 爲什麼? –

+2

讓我猜猜爲什麼。你堅持認爲OP必須通過指向指針的指針。這不適用於他在主程序中定義的2d數組。需要傳遞的是指向1d數組的指針('int(*)[COLSIZ]'),如另一個答案所示。 –

+0

@AlexeyFrunze - 啊,對。現在是別的了。感謝您的評論,編輯。 –

-1

它不工作,因爲你的函數聲明爲:

void matcpy (int* dst, int* src) 

和回報是:

return dst[i][j] = src[i][j] 

您應該在函數聲明更改爲:

void matcpy (int** dst, int** src) 
+2

什麼'返回'? (...) –

+1

錯誤,指向數組的指針和指針的指針不是同一個東西 –