三维数组怎么排列_第十九章、C语言学习之数组3

这一章我们来看一看多维数组。

我们假设有这么一个一维数组int a[6];这个数组里面有6个元素,那么我们可以看成这样一幅图:

b7b27bac298c4ae7722f8531eec0689f.png

那么如果这个数组中a[0]这个元素不是单纯的一个变量,而是一个5个元素的数组怎么办,我们先用图画出来:

a2d7f11b53f23c2c413e7d6f097ebdec.png

大家如果用过excel表格的应该都知道,excel表格里面有行和列,那么其实在这个数组中你也可以这么理解,我们如果把一维数组理解为列,然后把该数组中的元素数组理解为行,那么就是一个表格,我们如果需要找到其中一个元素,那么只要先找到列好,在找到行号,那么这个元素就找出来,那么我们从中其实也可以看出来怎么定义这个数组,就是先说总共有多少列,然后说总共有多少行,那么这个数组我们只要在一维数组的定义上在加上多少行就行,就是int a[6][5];,那么这样的一个数组声明就是二维数组,那么如果你在二维数组的元素中在插入一个数组元素:

2139c2e0d5bd63e4ff18b4f5b0b8f21d.png

那么这样的就是一个三维数组 声明就是这样 int a[6][5][3];那么我们还可以在继续深入,那么我们把这样3维以上的数组统称为多维数组。

我们以下图来看一看二维数组的初始化:

8b7d5df38eaf179afa44819825d769e3.png

首先,我们来看一下一维数组如果有6个元素怎么初始化:int a[6]={1,2,3,4,5,6};

那么如果是一个二维数组,按照这个图,我们来看一下,就是a[0],这个元素,我们用数组的方式在来初始化一下,那么可以这样写:

int a[6][5]={{10,20,30,40,50},{2},{3},{4},{5},{6}};

个人觉得这样表示比较清晰,当然你还可以这样写:

int a[6][5]={11,12,13,14,15,21,22,23,24,25,31,32,33,34,35,41,42,43,44,45,51,52,53,54,55,61,62,63,64,65};这样大家是不是觉得很乱;其中11-15是一组,21-25是一组,以此类推:

dfcdae1fcb0c49d0e19d60c0b2f09354.png

那么从二维数组我们引申出来到三维数组我们是不是可以这样初始化

e0d9e532e5742dda65fe072af60f48ea.png

是不是看的有点晕。但是只要对下图了解了,那基本就没问题了:

c9aa5188cded47c669084bb36327770c.png
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是使用指针偏移实现3x4x5三维数组旋转90度的C语言程序: ```c #include <stdio.h> void rotate(int (*input)[4][5], int (*output)[5][4][2]) { int i, j, k; // input[i][j][k] -> output[k][3-j][i][2] for (i = 0; i < 3; i++) { for (j = 0; j < 4; j++) { for (k = 0; k < 5; k++) { *(*(*(*(output + k) + 3 - j) + i) + 0) = *(*(*(input + i) + j) + k); *(*(*(*(output + k) + 3 - j) + i) + 1) = i; } } } } int main() { int input[3][4][5] = { {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}, {16, 17, 18, 19, 20}}, {{21, 22, 23, 24, 25}, {26, 27, 28, 29, 30}, {31, 32, 33, 34, 35}, {36, 37, 38, 39, 40}}, {{41, 42, 43, 44, 45}, {46, 47, 48, 49, 50}, {51, 52, 53, 54, 55}, {56, 57, 58, 59, 60}} }; int output[5][4][3][2]; rotate(input, output); int i, j, k, l; for (i = 0; i < 5; i++) { for (j = 0; j < 4; j++) { for (k = 0; k < 3; k++) { printf("%d(%d,%d) ", output[i][j][k][0], output[i][j][k][1], k); } printf("\n"); } printf("\n"); } return 0; } ``` 说明: - 输入数组`input`是一个三维数组,其中`input[i][j][k]`表示第`i`层、第`j`行、第`k`列的元素。 - 输出数组`output`是一个四维数组,其中`output[k][i][j][0]`表示第`k`列、第`3-i`行、第`j`层的元素,`output[k][i][j][1]`表示该元素在输入数组中的第二维下标(即`j`)。 - 在`rotate`函数中,使用三重循环遍历输入数组`input`,将每个元素旋转90度并存储到输出数组`output`中。 - 由于指针偏移操作比较繁琐,可以使用`*(*(*(*(output + k) + 3 - j) + i) + 0)`和`*(*(*(*(output + k) + 3 - j) + i) + 1)`的方式来访问`output[k][3-j][i][0]`和`output[k][3-j][i][1]`两个元素。 输入指针和输出指针分别为`input`和`output`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值