Я пытаюсь выяснить, как создать функцию, которая копирует содержимое из одного 3D-массива в другой 3D-массив, который должен быть пользовательский ввод . Мне удалось сделать программу в рамках одной основной функции, однако желаемый способ реализации этого заключается в наличии двух или более функций.
Первая попытка была следующей (то есть неверной - в одной основной функции)
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);
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");
}
}
возврат 0;
}
После того, как я провел исследование, и то, на что я не наткнулся, это было похоже на меня, оно требует ввода данных пользователем, однако это в 1D и не копирует содержимое.
Размер массива пользовательского ввода C
После просмотра я пытаюсь настроить следующее, однако при попытке распечатать исходный массив (даже не скопированный) происходит сбой системы.
#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
void printArray(int ***cpydisp,int x,int y,int z) {
int i,j,k;
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 copy3d(size_t x, size_t y, size_t z, int d[x][y][z], int src[x][y][z]) {
printf("s[%zu][%zu][%zu]\nSizes: d:%zu, d[]:%zu, d[][]:%zu, d[][][]:%zu\n\n",
x, y, z, sizeof d, sizeof d[0], sizeof d[0][0], sizeof d[0][0][0]);
// 'sizeof' on array function parameter 'src' returns
// size of 'int (*)[(sizetype)(y)][(sizetype)(z)]
memcpy(d, src, sizeof d[0] * x);
}
int main(void) {
int x,y,z;
printf("Enter the size of the array:\n");
scanf("%d", &x);
printf("Enter the size of the array:\n");
scanf("%d", &y);
printf("Enter the size of the array:\n");
scanf("%d", &z);
// ask for enough memory to fit `count` elements,
// each having the size of an `int`
int ***array = malloc(x * y * z * sizeof(***array));
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 display[%d][%d][%d]:", i, j, k);
scanf("%d", &array[i][j][k]);
}
}
}
printArray(array, x, y, z);
free(array);
}
Заранее спасибо