首页 > 代码库 > 伪数组(以行主序存储)下标访问
伪数组(以行主序存储)下标访问
《C和指针》第8章编程练习第6题:
1 /* 2 ** 2014/12/09, by ZHM 3 */ 4 #include <stdio.h> 5 #include <stdarg.h> 6 7 /* 8 ** 函数功能: 9 ** 允许用户访问“伪数组”,它的下标可以任意指定,并有完整的错误检查10 ** 函数参数:11 ** arrayinfo:一个可变长度整型数组,包含一些关于伪数组维数的信息,12 ** arrayinfo[0] 指定伪数组的维数,1<=arrayinfo[0]<=1013 ** arrayinfo[1]和arrayinfo[2]给出第1维的上限和下限,以此类推14 ** ... : 可变参数列表,包含与伪数组维数相等个数的参数。15 ** 用于标识伪数组中某个特定位置的下标值16 ** 函数返回:17 ** 返回伪数组的offset量,用于表示一个向量(一位数组)的下标18 ** 如出现以下错误情况,则返回-119 ** 1. 维数不处于1和10之间;2. 下标小于下限值;20 ** 3. 下标大于上限值;4. 上限值小于对应的下限值。21 */22 int 23 array_offset( int arrayinfo[], ... )24 {25 /*26 ** 检查伪数组的维数是否在1-10之间27 */28 int N = arrayinfo[0]; // N表示伪数组的维数29 if( N < 1 || N > 10 )30 return -1;31 32 va_list var_arg;33 int s; // s表示下标参数34 int lo, hi; // lo表示下限,hi表示上限35 int lo_index, hi_index; // 在arrayinfo数组中lo和hi对应的索引值36 int loc = 0; // 表示伪数组的目标位置37 int j;38 39 /*40 ** 伪数组的目标位置用一个距离伪数组起始位置的整型偏移量表示41 ** 以下部分通过公式计算伪数组的目标位置42 */43 va_start( var_arg, arrayinfo[0] );44 for( j = 0, lo_index = 1, hi_index = 2; j < N; ++ j, lo_index += 2, hi_index += 2 )45 {46 s = va_arg( var_arg, int ); // 用va_参数宏访问列表47 lo = arrayinfo[lo_index];48 hi = arrayinfo[hi_index];49 if( hi < lo || s < lo || s > hi ) // 判断是否存在错误情况50 return -1;51 52 // 计算目标位置53 loc = loc * ( hi - lo + 1 ) + s - lo;54 }55 va_end( var_arg );56 57 return loc;58 }59 60 int61 main()62 {63 int arrayinfo[] = { 3, 4, 6, 1, 5, -3, 3 };64 int a, b, c;65 scanf( "%d%d%d", &a, &b, &c );66 int offset = array_offset( arrayinfo, a, b, c );67 printf( "%d", offset );68 return 0;69 }
伪数组(以行主序存储)下标访问
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。