多维数组
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 }
运行结果:
以上是关于多维数组的主要内容,如果未能解决你的问题,请参考以下文章