#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 array
{
int m1;
int m2;
int m3;
int* array;
}triplearray;
status creat(triplearray* array,int m1,int m2,int m3);
status destroy(triplearray* array);
status retrieve(triplearray array,int m1,int m2,int m3,int* x);
status store(triplearray* array,int m1,int m2,int m3,int x);
status output(triplearray array);
status copy(triplearray* arrayA,triplearray* arrayB);
int main()
{
int i1,i2,i3;
int i;
triplearray arrayA,arrayB;
creat(&arrayA,2,2,2);
creat(&arrayB,2,2,2);
for(i1=0;i1<arrayA.m1;i1++);
for(i2=0;i2<arrayA.m2;i2++);
for(i3=0;i3<arrayA.m3;i3++);
{
store(&arrayA,i1,i2,i3,1);
}
for(i1=0;i1<arrayB.m1;i1++);
for(i2=0;i2<arrayB.m2;i2++);
for(i3=0;i3<arrayB.m3;i3++);
{
store(&arrayB,i1,i2,i3,3);
}
output(arrayA);
output(arrayB);
return 0;
}
status creat(triplearray* array,int m1,int m2,int m3)
{
array->m1=m1;
array->m2=m2;
array->m3=m3;
array->array=(int*)malloc(sizeof(int)*m1*m2*m3);
if(!array->array)
return error;
return ok;
}
status destroy(triplearray* array)
{
if(!array->array)
return error;
free(array->array);
return ok;
}
status retrieve(triplearray array,int m1, int m2,int m3,int* x)
{
if(!array.array)
return notpresent;
if(m1<0||m1>=array.m1)
return illegalindex;
if(m2<0||m2>=array.m2)
return illegalindex;
if(m3<0||m3>=array.m3)
return illegalindex;
*x=*(array.array+m1*array.m2*array.m3+m2*array.m3+m3);
return ok;
}
status store(triplearray* array, int i1, int i2, int i3, int x)
{
if (!array->array)
return notpresent;
if (i1 < 0 || i2 < 0 || i3 < 0 || i1 > array->m1 || i2 >array->m2 || i3 > array->m3)
return illegalindex;
*(array->array + i1 * array->m2 * array->m3 + i2 * array->m3 + i3) = x;
return ok;
}
status output(triplearray array)
{
int i1,i2,i3;
int value;
if(!array.array)
return notpresent;
for(i1=0;i1<array.m1;i1++)
for(i2=0;i2<array.m2;i2++)
for(i3=0;i3<array.m3;i3++)
{
retrieve(array,i1,i2,i3,&value);
printf("array[%d][%d][%d]=%d",i1,i2,i3,value);
}
printf("\n");
return ok;
}
status copy(triplearray* arrayA,triplearray* arrayB)
{
int i1,i2,i3;
if(!arrayA->array||!arrayB->array)
return error;
if(arrayA->array==arrayB->array)
return duplicate;
for(i1=0;i1<arrayA->m1;i1++)
for(i2=0;i2<arrayA->m2;i2++)
for(i3=0;i3<arrayA->m3;i3++)
{
int value;
retrieve(*arrayA,i1,i2,i3,&value);
store(arrayB,i1,i2,i3,value);
}
return ok;
}
得到的却是如图所示的结果。
初步判断是在store函数中出了问题,但找不到错因。经过调试后发现,执行store后数组中是没有正常存储进数值的,我怀疑就是这个原因导致输出全是地址,求解决方法!谢谢