Привет, я наткнулся на вопрос в своем учебнике, который гласит: «Напишите функцию, которая делает копию содержимого трехмерного массива целых чисел. Функция должна поддерживать любой размер трехмерного массива. '
Обсудив это с моим лектором, он уточнил, что прототип функции должен выглядеть примерно так (это 2D, мне нужно 3D).
int sum2d(int rows, int cols, int ar[rows][cols]);
Теперь, как я сейчас его кодирую, это все, что делается в основной функции, и она работает как надо, т.е. копирует все содержимое и т. Д.
int main()
{
int x,y,z;
printf("Enter x value.\n");
scanf("%d", &x);
printf("Enter y value.\n");
scanf("%d", &y);
printf("Enter z value.\n");
scanf("%d", &z);
int *arrx = malloc(x * sizeof(*arrx));
int *arry = malloc(y * sizeof(*arry));
int *arrz = malloc(z * sizeof(*arrz));
printf("The size of the array is %d.\n", x*y*z);
/* 3D array declaration*/
int disp[x][y][z];
int cpydisp[x][y][z];
/*Counter variables for the loop*/
int i, j, k;
for(i=0; i<x; i++) {
for(j=0;j<y;j++) {
for (k = 0; k < z; k++) {
printf("Enter value for disp[%d][%d][%d]:", i, j, k);
scanf("%d", &disp[i][j][k]);
}
}
}
memcpy(cpydisp,disp, sizeof(disp));
//Displaying array elements
printf("Three Dimensional array elements:\n");
for(i=0; i<x; i++) {
for(j=0;j<y;j++) {
for (k = 0; k < z; k++) {
printf("%d ", cpydisp[i][j][k]);
}
printf("\n");
}
}
}
Однако это не правильно, поскольку мне нужно реализовать функцию только для копирования, и я придумал это. Создайте функцию с именем void array_copy
, которая практически копирует содержимое массива disp
в другой массив cpydisp
с помощью memcpy. Затем вызывается функция array_copy
в основном, но это не работает.
int i, j, k;
int x,y,z;
int disp[x][y][z];
int cpydisp[x][y][z];
void array_copy() {
memcpy(cpydisp, disp, sizeof(disp));
//Displaying array elements
printf("Three Dimensional array elements:\n");
for (i = 0; i < x; i++) {
for (j = 0; j < y; j++) {
for (k = 0; k < z; k++) {
printf("%d ", cpydisp[i][j][k]);
}
printf("\n");
}
}
}
int main()
{
printf("Enter x value.\n");
scanf("%d", &x);
printf("Enter y value.\n");
scanf("%d", &y);
printf("Enter z value.\n");
scanf("%d", &z);
//int *arrx = malloc(x * sizeof(*arrx));
//int *arry = malloc(y * sizeof(*arry));
//int *arrz = malloc(z * sizeof(*arrz));
printf("The size of the array is %d.\n", x*y*z);
/* 3D array declaration*/
/*Counter variables for the loop*/
int i, j, k;
for(i=0; i<x; i++) {
for(j=0;j<y;j++) {
for (k = 0; k < z; k++) {
printf("Enter value for disp[%d][%d][%d]:", i, j, k);
scanf("%d", &disp[i][j][k]);
}
}
}
array_copy();
}
Любые мысли, пожалуйста, о том, как я могу это исправить, так как я не могу понять, что с ним не так, когда он явно может принять любой размер пользователем, вменяющим размер, который он хочет, прежде чем что-либо начинать.
Заранее спасибо
Edit:
#include<stdio.h>
#include <string.h>
int x,y,z;
int i, j, k;
void user_input(){
printf("Enter x value.\n");
scanf("%d", &x);
printf("Enter y value.\n");
scanf("%d", &y);
printf("Enter z value.\n");
scanf("%d", &z);
}
void array_copy() {
int disp[x][y][z];
int cpydisp[x][y][z];
memcpy(cpydisp, disp, sizeof(disp));
//Displaying array elements
printf("Three Dimensional array elements:\n");
for (i = 0; i < x; i++) {
for (j = 0; j < y; j++) {
for (k = 0; k < z; k++) {
printf("%d ", cpydisp[i][j][k]);
}
printf("\n");
}
}
}
int main()
{
user_input();
int disp[x][y][z];
int cpydisp[x][y][z];
printf("The size of the array is %d.\n", x*y*z);
/* 3D array declaration*/
/*Counter variables for the loop*/
for(i=0; i<x; i++) {
for(j=0;j<y;j++) {
for (k = 0; k < z; k++) {
printf("Enter value for disp[%d][%d][%d]:", i, j, k);
scanf("%d", &disp[i][j][k]);
}
}
}
array_copy();
}
Я повторил это таким образом, теперь выводится что-то, а не вторая попытка, однако вывод - это просто случайные числа. то есть:
Enter x value.
1
Enter y value.
2
Enter z value.
3
The size of the array is 6.
Enter value for disp[0][0][0]:1
1
Enter value for disp[0][0][1]:2
2
Enter value for disp[0][0][2]:3
3
Enter value for disp[0][1][0]:4
4
Enter value for disp[0][1][1]:5
5
Enter value for disp[0][1][2]:6
6
Three Dimensional array elements:
797168 0 6421264
0 3 0
Process finished with exit code 0
Правильный вывод должен быть 1,2,3,4,5,6
Еще раз спасибо