#include <stdio.h> void myCopy(int (*f)[3], int (*t)[3]); int main() { int a[3][3], b[3][3], *p, i, j; for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) scanf("%d", &a[i][j]); myCopy(a, b); p = b; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { printf("%d ", *p); p++; } printf("\n"); } return 0; } void myCopy(int (*f)[3], int (*t)[3]) { int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) *(t[0] + j) = *(f[0] + j); } }补充完整
时间: 2024-04-01 13:38:45 浏览: 45
这段代码存在一些问题,具体如下:
1.在 myCopy 函数中,复制数组的操作不正确,应该是将 f 数组中的每个元素复制到 t 数组对应位置的元素中,而不是将 f 数组的第一行元素复制到 t 数组的所有行中;
2.在主函数中,将二维数组 b 直接赋值给指针 p 是错误的,应该将 b 数组的首地址赋值给指针 p。
修改后的代码如下:
#include <stdio.h>
void myCopy(int (*f)[3], int (*t)[3]);
int main() {
int a[3][3], b[3][3], *p, i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
scanf("%d", &a[i][j]);
myCopy(a, b);
p = &b[0][0];
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
printf("%d ", *(p + i * 3 + j));
}
printf("\n");
}
return 0;
}
void myCopy(int (*f)[3], int (*t)[3]) {
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++)
t[i][j] = f[i][j];
}
}
阅读全文