指针----三维矩阵
最近在研究三维数组–特此记录,博主想用指针取DD[1][0][2]的值,但是发现DD+1并不是在DD地址加上5×7×10个sizeof(double)地址,也就是说不是使用DD[72]表示DD[1][0][2],因为申请分配不是连续的。但是可以使用---- * ( * ( *(DD + 1) ) + 2)进行索引。解索引第一次为二维数组索引,解索引第二次为一位数组索引,解索引第三次为数组的元素索引。
#include<iostream>
int main( int argc, char** argv)
{
using namespace std;
int a = sizeof(double);
// 用malloc 和 free来生成三维动态数组
int X_Length = 5, Y_Length = 10, Z_Length = 7;//长度定义
double ***DD;//声明指针
DD = (double***)malloc(sizeof(double**)*X_Length);//X的长度
for (int x = 0; x < X_Length; x++)
{
DD[x] = (double **)malloc(sizeof(double*)*Y_Length);//Y的长度
for (int y = 0; y < Y_Length; y++)
{
DD[x][y] = (double *)malloc(sizeof(double)*Z_Length);//Z的长度
if (x == 1 && y == 0) DD[x][y][2] = 1.00;
}
}
//数组的声明完成,可以对数组进行操作
std::cout << DD << endl;
std::cout << DD+1 << endl;
std::cout << DD[1][0][2] << "\t" << *(*(*(DD + 1)) + 2);
//用完数组后,用free将内存释放
for (int x = 0; x < X_Length; x++)
{
for (int y = 0; y < Y_Length; y++)
{
free(DD[x][y]);//释放Z
}
}
for (int x = 0; x < X_Length; x++)
{
free(DD[x]);//释放Y
}
free(DD);//释放X
cin.get();
return 0;
}