构造一个3维矩阵

#include <stdio.h>
#include <stdlib.h>

void * malloc3d( int w, int h, int d, int size )
{
  int j, k;
  void ***a = (void ***) malloc( d*sizeof (void **) + h*d*sizeof (void *) + w*h*d*size );

  for( k=0; k<d; k++ )
    a[k] = ((void **)(a+d)) + k*h;

  for( k=0; k<d; k++ )
    for( j=0; j<h; j++ )
     a[k][j] = ((char*)(a+d+h*d)) + (k*h+j)*w*size;

  return a;
}

class Array3D
{
  public:
    int w, h, d;
    short ***m;
    Array3D( int width, int height, int depth )
    {
     w = width;
     h = height;
     d = depth;
     m = (short***)malloc3d(w,h,d,sizeof (short));
    }
    ~Array3D(){free(m);}
};

void main()
{
  Array3D a(3, 4, 6);

  int i, j, k;
  for( k=0; k<a.d; k++ )
    for( j=0; j<a.h; j++ )
     for( i=0; i<a.w; i++ )
     a.m[k][j][i] = i;

  for( k=0; k<a.d; k++ )
  {
    for( j=0; j<a.h; j++ )
    {
     for( i=0; i<a.w; i++ )
     printf( "%3i", a.m[k][j][i] );
     printf( "; " );
    }
    printf( "/n" );
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值