0

我的导师为“矩​​阵复制”展示了这张幻灯片:

#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 的东西?

4

3 回答 3

3

是的,这是不正确的。

你需要:

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

或者

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

memcpy可以使用,但由于这是一个练习,也许重点是了解如何迭代 2D 数组以及如何访问其元素。


for循环中,, 必须;. 其他答案/评论是正确的 - 您可以在表达式中使用逗号,并且您只能在 中添加;for例如:

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

但这将是未定义的行为,因为:

  • i<ROWSIZ, i=i+1只要条件为真i != 0- 逗号运算符的评估是序列中的最后一个值
  • 照原样iint溢出将导致未定义的行为

换句话说,您可能会以无限循环告终。

于 2012-10-10T06:24:48.613 回答
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];
}
于 2012-10-10T06:36:19.983 回答
-1

它不起作用,因为您的函数声明是:

void matcpy (int* dst, int* src)

回报是:

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

您应该将函数声明更改为:

void matcpy (int** dst, int** src)
于 2012-10-10T06:26:32.653 回答