#include
#include
#include
#define max_array_dim 8
#define ok 1
#define error 0
#define overflow -1
typedef int status;
typedef int elemtype;
typedef structarray;
下面的部分用來初始化陣列
status initarray(array* a, int dim,… )
va_list ap;
int elemtotal = 1 , i = 0;
if(1 > dim || max_array_dim < dim) return error;
a->dim = dim;
a->bounds = (int *)malloc(dim * sizeof(int));
if(!a->bounds)
exit(overflow);
va_start(ap,dim);
for(i = 0 ; i < dim ; i++){
a->bounds[i] = va_arg(ap,int);
if(a->bounds <= 0) return error;
elemtotal *= a->bounds[i]; //計算元素的總的個數
a->base = (elemtype *)malloc(elemtotal * sizeof(elemtype)); //分配陣列的空間,為a指定基址
//為constants分配空間
a->constants = (int *)malloc(dim * sizeof(int));
if(!a->constants) exit(overflow);
/*下面的部分是整個程式中最難理解的部分,其中的constants[x]相當於第x維的單位長度,當x=1時即陣列的第1維中每個單位包含的元素數,同理第2。。。一直到第n-1維,第n-1維的每個單位長度為1.*/
a->constants[dim-1] = 1;
for(i = dim -2 ; i >= 0 ; i–){
a->constants[i] = a->bounds[i+1] * a->constants[i+1];
// printf(「%d 「,a->constants[i]);
for(i = 0 ; i < dim ; i++)
// printf(「\n%d 「,a->constants[i]);
return ok;
//取得指定下標的偏移量
status locate(array* a,va_list ap,int* off)
int i=0,ind;
*off = 0;
for(i = 0 ; i < a->dim ; i++){
ind = va_arg(ap,int);
if(ind < 0 || ind >= a->bounds[i])return error;
/*這裡通過上面我們計算的那個單位長度與每維序數相乘的積累加起來即為偏移量*/
*off += a->constants[i]*ind;
//取得陣列的值
elemtype value(array* a,…)
va_list ap;
int off = 0;
va_start(ap,a);
if(!locate(a,ap,&off))return error;
return *(a->base+off);
//設定陣列的值
status set(array* a,elemtype b,…)
va_list ap;
int off = 0;
va_start(ap,b);
if(!locate(a,ap,&off))return error;
*(a->base+off) = b ;
return ok;
//釋放這個陣列
status destoryarray(array* a){
if(!a->base)return error;
free(a->base);
if(!a->bounds)return error;
free(a->bounds);
if(!a->constants) return error;
free(a->constants);
return ok;
post views:
1,617
c語言向自定陣列 C語言陣列的定義及引用
c語言陣列的定義及引用 1.1 一維陣列的定義 初始化和引用 1.一維陣列的定義方式為 型別說明符 陣列名 常量表示式 1 陣列名的命名方法與變數名相同,遵循識別符號命名規則 2 陣列是用方括號括起來的常量表示式,不能用圓括號 3 常量表示式表示陣列元素的個數,即陣列的長度,陣列的下標從0開始,下標...
c語言向自定陣列 C語言 用指針對10個數排序
例31 c語言用指標方法對10個整數按由大到小順序排序。解題思路 在主函式中定義陣列,用來存放10個整數,定義int 型指標變數p指向a 0 定義函式sort將陣列中的元素按由大到小排序。排序函式 void sort int x,int n 自定義排序函式 t x k 賦值 x k x i x i ...
C語言資料結構 陣列矩陣
ifndef array h define array h include head.h define max array dim 8 define mu 20 define nu 20 define max array size 12500 陣列 typedef struct array 理解定義...