指针----三维矩阵

指针----三维矩阵

最近在研究三维数组–特此记录,博主想用指针取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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值