多维数组及其实现(以三维数组为例)
#include <stdio.h>
#include <stdlib.h>
typedef int dataType;
// 4.3 数组的存储和相关操作,以三维数组为例
typedef struct
{
dataType *base;
int index[3];
int c[3];
}array;
// 1. 三位数组的初始化
int initArray(array *A, int a,int b, int c)
{
if(a<0 || b<0 || c<0)
{
printf("非法的数组声明操作!\n");
return 0;
}
// 给数组分配一片连续的空间
A->base = (dataType *) malloc(a*b*c*sizeof(dataType));
if(!A->base) return 0; // 空间分配失败
A->index[0] = a,A->index[1] = b,A->index[2] = c;
A->c[0] = b*c,A->c[1] = c,A->c[2] = 1;
return 1;
}
// 2.三维数组的赋值
int setValue(array *A,int a,int b, int c, dataType x)
{
int offset; // 地址偏移量
if(a<0 || b<0 || c<0 || a>=A->index[0] || b>=A->index[1] || c>=A->index[2])
return 0; // 数组索引越界
offset = a*A->c[0] + b*A->c[1] + c*A->c[2];
*(A->base + offset) = x;
return 1;
}
// 3.三维数组的取值
int getValue(array A,int a,int b, int c, dataType *x)
{
int offset; // 地址偏移量
if(a<0 || b<0 || c<0 || a>=A.index[0] || b>=A.index[1] || c>=A.index[2])
return 0; // 数组索引越界
offset = a*A.c[0] + b*A.c[1] + c*A.c[2];
*x = *(A.base + offset);
return 1;
}
int main()
{
array A; // 声明三维数组
int a = 2, b = 3, c = 4;
initArray(&A,a,b,c); // 初始化2*3*4的三位数组
dataType x = 10,y;
if(setValue(&A,a-1,b-1,c-1,x))
printf("给数组A[%d][%d][%d]赋值%d\n",a-1,b-1,c-1,x);
else printf("数组索引越界!");
if(getValue(A,a-1,b-1,c-1,&y))
printf("数组A[%d][%d][%d]的值为%d",a-1,b-1,c-1,y);
else printf("数组索引越界!");
return 0;
}
评论 (0)