【摘要】
本文介绍高维数组与数组指针的预备知识,讲述如何初始化二维数组,高维数组,如何初始化二维数组指针,高维数组指针。文末给出采用指向指针的指针的方法,动态初始化,一维数组,二维数组,高维数组的源码。
【正文】
1. 高维数组的初始化
分行赋值
int a[2][4] = {{1,2,3,4},{6,7,8,9} };
单行赋值
int a[2][4] = {1,2,3,4,6,7,8,9};
部分赋值
int a[2][4] = {{1},{6}};
省略赋值
int a[][2][4] = {{1,2,3,4},{6,7,8,9}};
2. 数组的动态内存分配与销毁
动态分配一维数组
#include <iostream>
int main()
{
int *ptr=new int [10];
for(int i=0;i<10;i++)
{
ptr[i]=i;
std::cout<<ptr[i]<<'\n';
}
return 0;
}
动态分配二维数组
#include <iostream>
int main(){int **ptr = new int *[10];for(int i = 1; i <= 10 ; i++){ptr[i] = new int[3];for ( int j = 1; j <= 3 ; j++){ptr[i][j] = 10*i+j;std::cout<<ptr[i][j]<<'\n';}}return 0;}
动态分配高维数组
#include <iostream>
int main()
{
int ***ptr = new int **[10];
for(int i = 1; i <= 10 ; i++)
{
ptr[i] = new int*[3];
for ( int j = 1; j <= 3 ; j++)
{
ptr[i][j] = new int[5];
for( int k = 1; k<= 5 ; k++)
{
ptr[i][j][k] = 100*i+10*j+k;
if (ptr[i][j][k]<1000)
std::cout<<0<<ptr[i][j][k]<<'\n';
else
std::cout<<ptr[i][j][k]<<'\n';
}
}
}
return 0;
}
delete用法
1> int *a = new int;
delete a; //释放单个int的空间
2>int *a = new int[5];
delete [] a; //释放int数组空间
3. malloc/free 用例
1>开辟单个数据单元空间
int * a = (int*)malloc(sizeof(int));
2>开辟数组数据单元空间
int * a = (int*)malloc(num*sizeof(int));
3>不论数组数据还是单元数据,free函数使用方式都是一样的
free(a);
4. 重点理解分析指向指针的指针以及三级指针
int **ptr = new int *[10];
int*[10] 表示10个指针,元素构成的数组;
int ***ptr = new int **[10];
int **[10]表示10个指向指针的指针,元素构成的数组;