创作不易,本篇文章如果帮助到了你,还请点赞支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
多维数组(三维及以上)与二维数组原理相似: 二维数组存储原理
三维数组就是存放二维数组的数组。主要是对指针和存储原理的理解 体里有面、面里有行、行里有列。一维数组:线性思维;二维数组:矩阵思维;三维数组:多面体思维。面->行->列。
目录
一、三维数组的声明
二、三维数组的初始化
三、三维数组的遍历
三维数组名+下标:
1)用int型指向一维数组的指针(行指针)
2)用int型指向二维数组的指针(平面指针)
3)用int型指向三维数组的指针(立体指针)
一、三维数组的声明
int arr1[2][3][4];
二、三维数组的初始化
与一二维数组相同,有完全初始化和不完全初始化。
int arr[2][3][4] = { 1,2,3,4,5,6,7,8 };
三、三维数组的遍历
三维数组名+下标:
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
for (int k = 0; k < 4; k++)
{
printf("%d ", arr[i][j][k]);
}
}
}
1)用int型指向一维数组的指针(行指针)
#include<stdio.h>
int main()
{
int arr[2][3][4] = { 1,2,3,4,5,6,7,8 };
// 定义一维数组指针(即行指针)pl ,可以指向 具有4个int的行。
// 让pl指向arr数组的第0面第0行。
// 使用pl结合下标方式对arr数组遍历
int(*pl)[4];
pl = &arr[0][0];
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
printf("%d %d %d %d ", *(*pl+0),*(*pl+1),*(*pl+2),*(*pl+3));
pl++;
}
printf("\n");
}
return 0;
}
2)用int型指向二维数组的指针(平面指针)
#include<stdio.h>
int main()
{
//定义二维数组指针(即平面指针)pm,可以指向3×4的二维表格。
//让pm指向arr第0面的首地址
//使用pm结合下标方式arr数组遍历
int arr[2][3][4] = { 1,2,3,4,5,6,7,8 };
int(*pm)[3][4];
pm = &arr[0];
for (int i = 0; i < 2; i++)
{
printf("%d %d %d %d %d %d %d %d", *(* (*pm) + 0), *(*(*pm) + 1), *(*(*pm) + 2), *(*(*pm) + 3), *(*(*pm) + 4), *(*(*pm) + 5), *(*(*pm) + 6), *(*(*pm) + 7));
pm++;
printf("\n");
}
}
3)用int型指向三维数组的指针(立体指针)
#include<stdio.h>
int main()
{
//用不同类型的指针对三维数组arr进行遍历。
int arr[2][3][4] = { 1,2,3,4,5,6,7,8 };
//使用能够指向一个int型变量的指针变量p指向arr数组的第一个值。
/* 然后用p 遍历arr所有元素。*/
int(*p)[2][3][4];
p = &arr;
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
for (int k = 0; k < 4; k++)
{
printf("%d ", (*p)[i][j][k]);
}
printf("\n");
}
printf("\n");
}
return 0;
}