多维数组

Posted cs0915

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多维数组相关的知识,希望对你有一定的参考价值。

 严格来说,C++语言中美有多维数组,通常所说的多维数组其实是数组的数组,记住这一点对于以后了解和使用多维数组大有裨益。

当一个数组的元素仍然是数组时,通常使用两个维度来定义它:一个维度表示数组本身大小,另外一个维度表示其元素(也是数组)大小。

int ia[3][4];//大小为3的数组,每个元素是含有4个整数的数组
int arr[10][20][30];//大小为10的数组,每个元素都是大小为20的数组,这些数组的元素是含有30个整数的数组

 多维数组的初始化

 

int ia[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
int ia[3][4]={{0},{4},{8}};//多维数组的每一行用花括号括起来

指针和多维数组

1 int a[][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
2 // a : 代表第0行首地址
3 // a+i -> &a[i] : 代表第i行首地址
4 // *(a+i) -> a[i] : 代表第i行首元素地址
5 // *(a+i)+j -> &a[i][j] : 第i行第j列元素的地址
6 // *(*(a+i)+j) -> a[i][j] : 第i行第j列元素的值

在内存分配时,不管是多少维的数组都是分配连续的地址。但多维数组在逻辑上是分段的,如a[3][4]这样的数组,内存分配上是连续的,所以数组名a是这个多维数组的起始地址。这个多维数组逻辑上分为三个段,每一个段有4个元素(在物理内存中这个都是连续的),a[0]也是指针(a[0],a[1],a[2]都是数组名),表示第一段的首地址,实际上a和a[0]的内容是一样的,同理a+i和a[i]的内容也是一样的,但a和a[0]的意义并不相同,可以理解为a表示第一行数组的地址,a[0]表示第一行数组首元素的地址。

 

 1 #include <iostream> 
 2 using namespace std;
 3 int main()
 4 { 6     int ia[2][3]={{1,2,3},{4,5,6}};
 7     cout<<ia<<" "<<*ia<<" "<<**ia<<endl;
 8     int (*p)[3]=&ia[0];//p是指向整个数组的,并不是首元素地址 
 9     cout<<p<<" "<<ia[0]<<endl;
10     for(int i=0;i<3;i++)
11         cout<<*(*p+i)<<" ";
12     return 0;
13 }

运行结果:

技术图片

 

以上是关于多维数组的主要内容,如果未能解决你的问题,请参考以下文章

将多维数组从托管代码传递到非托管代码

PHP如何将嵌套的foreach变成数组的数组(多维数组)

C 语言数组 ( 多维数组本质 | 步长角度 理解 多维数组本质 )

循环多维数组以生成谷歌图表的多维数组

使用 for 循环创建多维数组

php计算多维数组某个值的和