# include<stdio.h> # include<malloc.h> # define error 0 # define ok 1 # define NotPresent 2 # define Duplicate 3 # define IllegalIndex 4 typedef int Status; typedef struct triplearray { int m1; int m2; int m3; int * array; }TripleArray; Status CopyArray(TripleArray *TripleArrayA,TripleArray *TripleArrayB); void OutputArray(TripleArray TripleArray); Status StoreArrayItem(TripleArray *TripleArray,int i1,int i2,int i3,int x); Status RetrieveArray(TripleArray TripleArray,int i1,int i2,int i3,int*x); Status DestroyArray(TripleArray*TripleArray); Status CreateArray(TripleArray *TripleArray,int m1,int m2,int m3); Status CreateArray(TripleArray *TripleArray,int m1,int m2,int m3) { TripleArray->m1 =m1; TripleArray->m2=m2; TripleArray->m3=m3; TripleArray->array=(int *)malloc(m1*m2*m3*sizeof(int)); if(!TripleArray->array) return error; return ok; } Status DestroyArray(TripleArray*TripleArray) { if(!TripleArray) return error; if(!TripleArray->array)free (TripleArray->array); free(TripleArray); return ok; } Status RetrieveArray(TripleArray TripleArray,int i1,int i2,int i3,int*x) { if(!TripleArray.array) return NotPresent; if(i1<0||i2<0||i3<0||i1>=TripleArray.m1||i2>=TripleArray.m2||i3>=TripleArray.m3) return IllegalIndex; *x=*(TripleArray.array+i1*TripleArray.m2*TripleArray.m3+i2*TripleArray.m3+i3); return ok; } Status StoreArrayItem(TripleArray *TripleArray,int i1,int i2,int i3,int x) { if(!TripleArray->array)return NotPresent; if(i1<0||i2<0||i3<0||i1>=TripleArray->m1||i2>=TripleArray->m2||i3>=TripleArray->m3) return IllegalIndex; *(TripleArray->array+i1*TripleArray->m2*TripleArray->m3+i2*TripleArray->m3+i3)=x; return ok; } void OutputArray(TripleArray TripleArray) { int i1,i2,i3; if(!TripleArray.array) return; for(i1=0;i1<TripleArray.m1;i1++) for(i2=0;i2<TripleArray.m2;i2++) for(i3=0;i3<TripleArray.m3;i3++) { int value; RetrieveArray(TripleArray,i1,i2,i3,&value); printf("array[%d][%d][%d]=%d\n",i1,i2,i3,value); } } Status CopyArray(TripleArray *TripleArrayA,TripleArray*TripleArrayB) { int i1,i2,i3; if(!TripleArrayA->array||!TripleArrayB->array)return NotPresent; if(TripleArrayA->array==TripleArrayB->array)return Duplicate; if(TripleArrayA->m1!=TripleArrayB->m1||TripleArrayA->m2!=TripleArrayB->m2||TripleArrayA->m3!=TripleArrayB->m3) return error; for(i1=0;i1<TripleArrayA->m1;i1++) for(i2=0;i2<TripleArrayA->m2;i2++) for(i3=0;i3<TripleArrayA->m3;i3++) { int value; RetrieveArray(*TripleArrayA,i1,i2,i3,&value); StoreArrayItem(TripleArrayB,i1,i2,i3,value); } return ok; } void main(void) { int i1,i2,i3; TripleArray TripleArrayA,TripleArrayB; CreateArray(&TripleArrayA,2,2,2); CreateArray(&TripleArrayB,2,2,2); for(i1=0;i1<TripleArrayA.m1;i1++) for(i2=0;i2<TripleArrayA.m2;i2++) for(i3=0;i3<TripleArrayA.m3;i3++) { StoreArrayItem(&TripleArrayA,i1,i2,i3,10); } for(i1=0;i1<TripleArrayB.m1;i1++) for(i2=0;i2<TripleArrayB.m2;i2++) for(i3=0;i3<TripleArrayB.m3;i3++) { StoreArrayItem(&TripleArrayB,i1,i2,i3,5); } OutputArray(TripleArrayA); printf("\n"); OutputArray(TripleArrayB); printf("\n"); CopyArray(&TripleArrayA,&TripleArrayB); OutputArray(TripleArrayA); printf("\n"); OutputArray(TripleArrayB); printf("\n"); }
本文使用 文章同步助手 同步