这段代码不正确吗?

时间:2012-10-10 06:20:23

标签: c pointers matrix copy memcpy

我的讲师将此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这样的东西?

3 个答案:

答案 0 :(得分: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时,溢出将导致未定义的行为

换句话说,你可能会以无限循环结束。

答案 1 :(得分: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];
}

答案 2 :(得分:-1)

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

void matcpy (int* dst, int* src)

并且在回报中是:

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

你应该将你的功能声明改为:

void matcpy (int** dst, int** src)
相关问题