1 结构体声明三维数组
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
int NX=2100;
int NY=400;
int NZ=500;
int i,j,k;
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<std::vector<std::vector<float> > > grdarray(NZ,vector<vector<float> >(NY,vector<float>(NX,0)));
for(int z=0;z<NZ;z++)
{
for (int y=0;y<NY;y++)
{
for (int x=0;x<NX;x++)
{
grdarray[z][y][x]=0.0;
cout<<grdarray[z][y][z]<<endl;
}
}
}
}
2 new动态声明三维数组
声明二维或者三维数组
int i,j,k;
int nWidth,nHeight,nThird;
cin>>nThird>>nHeight>>nWidth;
//声明动态二维数组
/*int **grayScale = new int * [nHeight];
for (i = 0;i < nHeight;i++)
{
grayScale[i] = new int[nWidth * 3];
}*/
//声明一个三维数组
int ***grayScale = new int ** [nThird];
for (i = 0;i < nThird;i++)
{
grayScale[i] = new int*[nHeight];
for (j = 0;j < nHeight;j++)
{
grayScale[i][j] = new int [nWidth];
}
}
for (k = 0;k < nThird;k++)
{
for (j = 0;j < nHeight;j++)
{
for (i = 0;i < nWidth;i++)
{
grayScale[k][j][i] = 1;
}
}
}
cout<<setw(5);
for (k = 0;k < nThird;k++)
{
for (j = 0;j < nHeight;j++)
{
for (i = 0;i < nWidth;i++)
{
cout<<grayScale[k][j][i]<<setw(5);
}
cout<<endl;
}
cout<<endl;
}
释放二维数组
//for(i = 0;i < nHeight;i++)
//{
// delete []grayScale[i];
//}
//delete []grayScale;
//释放三维数组
for (j = 0; j < nThird; j++)
{
for (i = 0; i < nHeight; i++)
{
delete[]grayScale[j][i];
}
delete[]grayScale[j];
}
delete[]grayScale;
3 malloc动态分配多维数组
//一维数组
#include <stdio.h>
#include <malloc.h>
#include <string.h>
void main(void)
{
int i ;
char (*p)[12] ; //[5][12]
p = malloc(5 * sizeof(char ) * 12); //申请5行的地址空间
for(i = 0 ; i < 5 ; i++)
{
strcpy(*(p + i), "hello");
}
for(i = 0 ; i < 5 ;i++)
{
printf("%s\n" , *(p + i));
}
free(p);
}
//二维数组
#include <stdio.h>
#include <malloc.h>
#include <string.h>
void main(void)
{
int i;
int j ;
int num = 0 ;
char **p ;//[5][12]
p =(char **) malloc( 5 * sizeof(char *) );
for(i = 0 ; i < 5 ; i++)
{
p[i] = malloc(12 * sizeof(char));
}
for(j = 0 ; j < 5 ; j++)
{
num = 0 ;
for(i = 0 ; i < 12 ; i++)
{
p[j][i] = 'a' + num;
num++ ;
}
}
for(j = 0 ; j < 5 ; j++)
{
for(i = 0 ; i < 12 ; i++)
{
printf("%c" , p[j][i]);
}
printf("\n");
}
for(i = 0 ; i < 5 ; i++)
{
free(p[i]);
}
free(p);
}
//三维数组
#include <stdio.h>
#include <malloc.h>
#include <string.h>
void main(void)
{
char ***pStr;
int i , j , k ;
// 自己分配一个三维的[3][4][5]
pStr = (char ***)malloc(3 * sizeof(char **)); //第一维
//分配二维的
for(i = 0 ; i < 3 ; i++)
{
*(pStr + i) = malloc(4 * sizeof(char *));
}
//分配三维
for(i = 0 ; i < 3 ; i++)
{
for(j = 0 ; j < 4 ; j++)
{
*(*(pStr + i) + j) = malloc(5 * sizeof(char));
}
}
//使用分配的内存
for(i = 0 ; i < 3 ; i++)
{
for(j = 0 ; j < 4 ; j++)
{
for(k = 0 ; k < 5 ; k++)
{
pStr[i][j][k] = 'a' ;
printf("%c" , pStr[i][j][k]);
}
printf("\n");
}
}
//释放第三维的内存
for(i = 0 ; i < 3 ; i++)
{
for(j = 0 ; j < 4 ;j++)
{
free((pStr[i][j]));
}
}
//释放第二维的内存
for(i = 0 ; i < 3 ; i++)
{
free(pStr[i]);
}
//释放第一维的内存
free(pStr);
}
如果您觉得这篇博文有用,请访问我的个人站:http://www.stubbornhuang.com,更多博文干货等着您。