我的讲师将此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这样的东西?
答案 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
就为真 - 对逗号运算符的求值是序列中的最后一个值i
为int
时,溢出将导致未定义的行为换句话说,你可能会以无限循环结束。
答案 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)