| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1642 人关注过本帖
标题:对函数Status InitArray(Array &A,int dim,...)的疑问
只看楼主 加入收藏
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
收藏
 问题点数:0 回复次数:1 
对函数Status InitArray(Array &A,int dim,...)的疑问
严尉敏主编的《数据结构》第五章 数组和广义表
初始化数组的算法为:
有一些地方不明白,请指教:

// 数组的顺序存储表示
#include<stdarg.h> // 标准头文件,提供宏va_start,va_arg和va_end,
// 用于存取变长参数表
#define MAX_ARRAY_DIM 8 // 假设数组维数的最大值为8
struct Array
{
ElemType *base; // 数组元素基址,由InitArray分配
int dim; // 数组维数
int *bounds; // 数组维界基址,由InitArray分配 //为什么要维界基址呢?
int *constants; // 数组映象函数常量基址,由InitArray分配 //此变量的作用是什么?
};

Status InitArray(Array &A,int dim,...) //为什么定义成可变参数函数?维数dim定下来了,数组不就定了吗?
{ // 若维数dim和各维长度合法,则构造相应的数组A,并返回OK
int elemtotal=1,i; // elemtotal是数组元素总数,初值为1(累乘器)
va_list ap;
if(dim<1||dim>MAX_ARRAY_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[i]<0)
return UNDERFLOW; // 在math.h中定义为4
elemtotal*=A.bounds[i]; //为什么要把维度连乘?
}
va_end(ap);
A.base=(ElemType *)malloc(elemtotal*sizeof(ElemType));
if(!A.base)
exit(OVERFLOW);
A.constants=(int *)malloc(dim*sizeof(int));//?
if(!A.constants)
exit(OVERFLOW);
A.constants[dim-1]=1;//?
for(i=dim-2;i>=0;--i)
A.constants[i]=A.bounds[i+1]*A.constants[i+1];//?
return OK;
}
搜索更多相关主题的帖子: Array Status int dim 函数 
2006-03-09 14:39
Bittern
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-8-14
收藏
得分:0 

我想数组维界基址bounds是每一维的存储首地址吧?
数组映象函数常量基址是具体每个数组元素的存储地址吧?

其他的就更不懂了,同问。
尤其是:
for(i=dim-2;i>=0;- -i)

A.constants[i]=A.bounds[i+1]*A.constants[i+1];
这一句。

2006-08-15 15:58
快速回复:对函数Status InitArray(Array &A,int dim,...)的疑问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016158 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved