您的位置:首页 > 编程语言 > C语言/C++

C语言多维数组的存储表示和实现

2011-09-22 10:33 603 查看
/** array.h**  Created on: 2011-9-21*      Author:liusheng*//** 头文件stdarg.h中几个宏作用的讲解* va_list args; //声明变量* va_start(args, before); //开始解析。args指向before后面的参数* 参数类型 var = va_arg(args, 参数类型);//取下一个参数并返回。args指向下一个参数* va_end(args);  //结束解析** #include <stdarg.h>* int arg_test(int a1,...) {*     va_list args;*     int i;*     int arg[5];**     va_start(args,a1);**     arg[0] = a1;//将参数的个数给arg[0]*     for(i = 1;i < 5;i ++) {*         arg[i] = va_arg(args,int);*     }**     va_end(args);**     for(i = 0;i < 5;i ++) {*         printf("%d\n",arg[i]);*     }* }*//** 其实多维数组的表示与实现只要理解了那个表示每个数据位置的公式和链表的操作就很简单了*/#include <stdarg.h>#include <stdio.h>#include <stdlib.h>#define ElemType int#define FALSE 0#define TRUE 1#define ARRAY_MAX_SIZE 8typedef struct {ElemType *base;int dim;int *bounds;//数组维界基址,用于存储维数int *constants;//数组映象函数地址}array;//初始化数组int initarray(array *a,int dim,...) {if(dim < 0 || dim > ARRAY_MAX_SIZE) return FALSE;a->dim = dim;int i;int elemsize = 1;va_list args;va_start(args,dim);a->bounds = (int *)malloc(sizeof(int) * dim);if(a->bounds == NULL) return FALSE;for(i = 0;i < dim;i ++) {a->bounds[i] = va_arg(args,int);elemsize *= a->bounds[i];}va_end(args);a->base = (ElemType *)malloc(sizeof(ElemType) * elemsize);if(a->base == NULL) return FALSE;a->constants = (int *)malloc(sizeof(int) * dim);if(a->constants == NULL) return FALSE;a->constants[dim - 1] = 1;for(i = dim -2;i >= 0;i --) {a->constants[i] = a->constants[i + 1] * a->bounds[i + 1];}return TRUE;}//向数组中插入数据int insertelem(array *a,ElemType e,...) {ElemType *locat;locat = a->base;int i;va_list temp;va_start(temp,e);for(i = 0;i < a->dim; i ++) {locat += va_arg(temp,int) * a->constants[i];}va_end(temp);printf("%d\t",*locat);*locat = e;return TRUE;}//销毁数组int destroyarray(array *a) {if(a->bounds) free(a->bounds);if(a->base) free(a->base);if(a->constants) free(a->constants);return TRUE;}
/*
 * test_arrcy.c* 测试array.h*  Created on: 2011-9-21*      Author: root*/#include "array.h"#include <stdio.h>#include <stdlib.h>int main() {array a;initarray(&a,3,2,3,4);insertelem(&a,888,0,0,0);insertelem(&a,88,0,0,0);insertelem(&a,8,1,2,3);insertelem(&a,88,1,2,3);return 0;}
//控制台结果
0	888	0	8

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: