多维数组的实现

#define MAX_ARRAY_DIM 8
#define ElemType int

//数组的定义
typedef struct {

 ElemType *base;
 int dim;
 int *bounds;
 int *constants;

} Array;

//初始化数组,dim后面是可变参数部分
int InitArray(Array &A,int dim,...)
{

 if(dim<1 || dim>MAX_ARRAY_DIM) return -1;
 A.dim=dim;
 A.bounds=(int *)malloc(dim*sizeof(int));
 if(!A.bounds)  return -1;
 int elemtotal=1;
 va_list ap;
 va_start(ap,dim);
 for(int i=0;i<dim;i++)
 {
    A.bounds[i]=va_arg(ap,int);
    if(A.bounds[i]<0)  return -1;
    elemtotal*=A.bounds[i];//计算数组总大小
 }
 va_end(ap);
 A.base=(ElemType *)malloc(elemtotal*sizeof(ElemType));
 A.constants=(int *)malloc(dim *sizeof(int));
 A.constants[i-1]=1;
 for(i=dim-2;i>=0;i--)
  A.constants[i]=A.bounds[i+1]*A.constants[i+1];//计算c值
 return 1;

 
}

//定位
int Locate(Array A,va_list ap,int &off)
{
   off=0;
   for(int i=0;i<A.dim;++i)
   {
      int ind=va_arg(ap,int);
   if(ind <0 || ind>=A.bounds[i])  return -1;
   off+=A.constants[i]*ind;
   }
   return 1;
}

//给数组赋值
int Assign(Array &A,ElemType e,...)
{
  va_list ap;
  va_start(ap,e);
  int off,result;
  if((result=Locate(A,ap,off))<=0)  return result;
  *(A.base+off)=e;
  return 1;
}
void main()
{
  Array A;
  int e;
  InitArray(A,3,5,6,7);
  Assign(A,100,1,2,3);
  Value(A,e,1,2,3)
  printf("/nA[1,2,3]=%d",e);

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值