我正在尝试解决如何创建一个将内容从一个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; }
进行研究后,我发现的内容与我类似,它需要用户输入,但这是一维的,不会复制内容。 User input array size 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);
}
预先感谢
答案 0 :(得分:0)
不建议这样做...但是缺少的是分配给阵列的内存。对于我来说,我想把注意力集中在内存和多维数组上,我喜欢逐步地思考它们,并且它们也逐步地设置它们。因此,首先,您先分配列,然后分配行,等等。
因此,您可以使用它:
// get the columns mem sorted
int ***array = (int ***)malloc(y * sizeof(***array));
// loop through all the columns and give them enough mem for a row
for (int j = 0; j < y; j++) {
array[j] = (int **)malloc(x * sizeof(**array));
//loop through each row and give them them enough mem for z axis
for (int i = 0; i < x; i++) {
array[j][i] = (int *)malloc(x * 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]);
}
}
}
这完成了所有操作,您可以访问成员。但这意味着在程序结束时,您需要再次执行循环,而不是malloc,您需要释放所有这些元素。同样,不建议这样做。阅读this或为自己省去一些麻烦simulate a 3d array