C语言虚拟伪数组

本文介绍如何在C语言中创建一个允许用户指定下标范围并带有错误检查功能的“伪数组”函数。该函数能处理1到10维的数组,下标可以为负数,通过计算得出相对于数组起始位置的偏移量。文章详细解释了如何计算不同维度的偏移量,并提供了处理一维到多维数组偏移的公式。同时,提出了将伪数组按列主序存储的要求,增加了实现的复杂性。

【8-6,8-7】如你所知,C编译器为数组分配下标时总是从0开始,而且当程序使用下标访问数组元素时,它并不检查下标的有效性,在这个项目中,你将要编写一个函数,允许用户访问“伪数组”,它的下标范围可以任意指定,并伴以完整的错误检查。下面是你将要编写的这个函数的原型:

int array_offset(int arrayinfo[],...);

这个函数接受一些用于描述伪数组的维数信息以及一组下标值,使用这个函数,用户既可以以向量的形式分配内存空间,也可以使用mallco分配空间,但按照多维数组的形式访问这些空间,这个数组之所以被称为“伪数组”是因为编译器以为它是个向量,尽管这个函数允许它按照多维数组的形式进行访问。

这个函数的参数如下:

参数 含义
arrayinfo                        

  一个可变长度的整型数组,包含一些关于伪数组的信息。

arrayinfo[0]指定伪数组具有的维数,它的值必须在1和10之间。

 

arrayinfo[1]和arrayinfo[2]给出第一维的下限和上限,

arrayinfo[3]和arrayinfo[4]给出第2维的下限和上限,

依次类推。

... 参数列表的可变部分可能包含多达10个的整数,用于标识伪数组中某个特定位置的下标值。你必须使用va_参数访问它们,当函数被调用时,arrayinfo[0]参数将会被传递。

公式根据下面给出的下标值计算一个数组的位置。变量s1,s2等代表下标参数s1,s2等。变量lo1和hi1代表下标s1的下限和上限,它们来源于arrayinfo参数,其余各维以此类推。变量loc表示伪数组的目标位置,它用一个距离伪数组起始位置的整型偏移量表示。

对于一维数组:

    loc = s1 - lo1

对于二维伪数组:

    loc = (s1 - lo1) × (hi2 - lo2 + 1) + s2 - lo2

对于三维伪数组:

    loc = [(s1 - lo1) × (hi2 - lo2 + 1) + s2 - lo2] × (hi3 - lo3 + 1) + s3 - lo3

对于四维伪数组:

    loc = [[(s1 - lo1) × (hi2 - lo2 + 1) + s2 - lo2] × (hi3 - lo3 + 1) + s3 - lo3] × (hi4 - lo4 + 1) + s4 - lo4

一直到第十维为止,都可以类似的使用这种方法推导出loc的值。你可以假定arrayinfo是个有效的指针,传递给array_offset的下标参数也是正确的。对于其他情况你必须进行错误检查,可能出现的一些错误有:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值