一维数组
一维数组是在存储空间中开辟一段连续存储地址的存储空间用来存储数据,代码如下
#include<iostream>
using namespace std;
int main ()
{
//一维数组
int array[5] = { 1 ,2 , 3 ,4 ,5 };
int (*p)[5] = &array; //数组指针:**指向整个数组**
cout << int(array) <<endl; //数组名字指向第一个元素空间
cout << int(p) << endl; //打印数组指针
cout << int(array + 1) << endl; //第一个元素空间的地址+1
cout << int(p +1) << endl; //整个数组空间+1
cout << *array << endl; //打印第一个整数
cout << *(array + 1) << endl; //打印第二个整数
cout << **(p + 1) << endl; //打印**越界**之后的第一个数
}
array指向一维数组中第一个整形数据,&array指向整个数组结构,示意图如下
结果如下
二维数组
二维数组就是二维数组中有很多一维数组.比如array[3][2]就是这个array[3][2]中有3个一维数组,一维数组中有两个数据元素.array是第一个一维数组的指针,&array是指向整个数组的指针.
#include<iostream>
using namespace std;
int main ()
{
int array[3][2] = { {10,11} , {12 ,13},{14,15}};
int (*p)[2] = array; //一维数组指针
int(*q)[3][2] = &array; //二维数组指针
for(int i = 0 ; i < 3 ; i ++)
for(int j = 0 ; j < 2 ; j++)
cout << "array" << '[' << i << ']' << '[' << j << ']' << '=' << array[i][j] << " "; //打印二维数组
cout << '\n';
for(int i = 0 ; i < 3 ; i++)
cout << array + i << endl; //从第一个到第三个一维数组指针
for(int i = 0 ; i < 3 ; i++)
cout << p + i << endl; //同上
cout << &array + 1 << endl ; //整个二维数组加一
cout << q + 1 << endl; //同上
return 0;
}
运行结果如下
在内存中示意图如下
可以把二维数组想象成平面,这个平面有很多一维数组组成,数组名array指向第一个一维数组,&array指向整个二维数组.
三维数组
三维数组就是其中含有很多二维数组的数组,比如array[3][2][2],就是含有3个二维数组的数组,其中二维数组是含有两个一维数组的数组,这个一维数组含有两个两个整型数据.代码如下
#include<iostream>
using namespace std;
int main ()
{
int array[3][2][2] =
{
{
{5,6},
{7,8},
},
{
{9,10},
{11,12},
},
{
{13,14},
{15,16},
}
};
int (*p)[2][2] = array; //p指向三维数组中第一个二维数组
int (*q)[3][2][2] = &array; //q指向整个三维数组
//打印三维数组
for(int i = 0 ; i < 3 ; i++)
for(int j = 0 ; j < 2; j++)
for(int k = 0 ; k < 2; k++)
{
cout << "array[" << i << ']' << '[' << j << ']' << '[' << k << ']' << '=' ;
cout << array[i][j][k] << endl;
}
cout << &array[0][0][0] << endl ; //第一个三维数组的地址
cout << p + 1 << endl ; // 三维数组中第一个二维数组加一
cout << array + 1 << endl; //同上
cout << q + 1 << endl; //整个三维数组+1
return 0;
}
三维数组数组名是指向第一个二维数组的二维数组指针,&array是指向整个三维数组的指针,运行结果如下:
在内存空间的位置如下:
可以将一个三维数组想象成立体图形,以上的空间想象图可以写成3个平面放在一起,实际上是没有这几条直线的,但是为了更有立体感,只能画成这样了…