| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1077 人关注过本帖
标题:伪数组问题,求指教,c和指针第八章第六道题
只看楼主 加入收藏
Feiyiyi1
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2017-10-22
结帖率:62.5%
收藏
 问题点数:0 回复次数:0 
伪数组问题,求指教,c和指针第八章第六道题
伪数组,这个代码是什么意思,不理解 ,这个伪数组的偏移量是怎么实现的,求指教
程序代码:
#include <stdio.h>
#include <stdarg.h>

#define     reg     register

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

int
main()
{
    int a[7] = { 3, 0, 3, 1,4, 2,6};
    printf( "array_offset( a, 2, 3, 4 )=%d \n ", array_offset( a, 2, 3, 4 ) );
    return 0;
}

int
array_offset( int arrayinfo[], ... )     //可变参数类型
{
    reg     int     ndim;
    reg     int     offset;
    reg     int     lo, hi;
    reg     int     i;
    int     s[ 10 ];
    va_list subscripts;

    ndim = *arrayinfo++;
    printf("ndim:%d\n",ndim);

    if( ndim >= 1 && ndim <= 10 )                  //arrayinfo[0]指定伪数组具有的维数,值必须在1和10之间
    {
        va_start( subscripts, arrayinfo );         //初始化
        //printf("subscripts:%c\n",subscripts);

        for( i = 0; i < ndim; i++ )
        {
            s[i] = va_arg( subscripts, int );      //subscripts指向下一个参数,以及下一个参数的类型
            printf("s[%d]=%d\n",i,s[i]);
        }

        va_end( subscripts );

        offset = 0;
        for( i = 0; i < ndim; i++ )
        {
            lo = *arrayinfo++;
            hi = *arrayinfo++;
            if( s[i] < lo || s[i] > hi )
            {
                return -1;
            }

            offset *= hi - lo + 1;
            offset += s[i] - lo;
        }
        return offset;
    }
    return -1;
}

搜索更多相关主题的帖子: 数组 reg int offset return 
2017-11-15 21:46
快速回复:伪数组问题,求指教,c和指针第八章第六道题
数据加载中...
 
   



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

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