数据结构,三维数组输出的是地址


#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;    
}




img


得到的却是如图所示的结果。
初步判断是在store函数中出了问题,但找不到错因。经过调试后发现,执行store后数组中是没有正常存储进数值的,我怀疑就是这个原因导致输出全是地址,求解决方法!谢谢


#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;
}