| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 595 人关注过本帖
标题:C语言中,如何为可变参数赋值?
只看楼主 加入收藏
迷路的国王
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2013-1-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
C语言中,如何为可变参数赋值?
例如scanf("%d", &i)中,系统如何为i赋值?
    我知道一些可变参数的知识。例如在printf("%d",i);中,调用va_list ap等相关函数,可使char *类型的ap指向字符i,此时i的内容已知,自然也就可以输出其值。但是在scanf("%d", &i)中,我的疑惑是&i取了整数i的地址,那么char *类型的ap如何指向i并为其赋值呢?或者是用了别的原理?
    如果有大神能写出一个简单的例子更好,比如写一个函数如int Scanf(FILE *fp, char* format,...)以便从文件fp中根据format格式读取字符,函数的调用方式为Scanf(fp, "%d", &i),i提前定义为int类型。
搜索更多相关主题的帖子: 知识 如何 C语言 
2015-03-04 17:27
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:5 
这是要人重写一个scanf函数的节奏么?
同等大神……

Only the Code Tells the Truth             K.I.S.S
2015-03-04 17:56
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9032
专家分:54061
注 册:2011-1-18
收藏
得分:5 
我的疑惑是&i取了整数i的地址,那么char *类型的ap如何指向i并为其赋值呢?
----------
void foo( int* pi )
{
    *pi = 1234;
}

int main()
{
    int i;
    foo( &i );
}
2015-03-05 08:31
执笔画江山
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:265
专家分:1010
注 册:2015-1-13
收藏
得分:5 
这个问题 太高大上了  同等大神。。。。楼上的解释  有点勉强啊→_→

授人以鱼,不如授人以渔
2015-03-05 09:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
回复 4楼 执笔画江山
大致的原理的確是3樓那樣的

授人以渔,不授人以鱼。
2015-03-05 11:34
执笔画江山
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:265
专家分:1010
注 册:2015-1-13
收藏
得分:0 
回复 5楼 TonyDeng
哦哦  谢啦
我在研究下  对于知识点的深入理解   还欠缺很多

授人以鱼,不如授人以渔
2015-03-05 11:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
這種機制有暗病,也是scanf()爲什麽總出現令程序員崩潰現象的原因。不過那比較長篇了,不在這裏談。

授人以渔,不授人以鱼。
2015-03-05 11:41
迷路的国王
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2013-1-28
收藏
得分:0 
感谢各位网友回答~~
2015-03-09 17:40
迷路的国王
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2013-1-28
收藏
得分:0 
现在才发现,我这个问题描述不好,首先因为va_list并非我误以为的char *类型,它只是一个可以存放可变参数的“容器”;其实我只想知道scanf如何得知了不确定参数的存在并对其进行赋值,这一点我已经找到更好的回答;最后,感谢大家的回答,并附上自己写的一个从文档中根据某种格式读取字符、整数、小数的程序,写此程序的初衷是进行类似Scanf(fp, "%f%d", &coef, &expn)的调用,以便获取某多项式各项的系数coef和指数expn...
程序代码:
int Scanf(FILE *fp, char *format,...)
{
    int *i;
    char *ch;
    float *f;
    int count, k, len;        
    int tmp;
    
    len = strlen(format);
    
    va_list ap;    
    va_start(ap, format);
    
    count = 0;
    for(k=2; k<=len; k=k+2)
    {
        if(format[k-1]=='c')        //读取字符
        {
            ch = va_arg(ap, char*);            
            count += fscanf(fp, "%c", ch);        
        }    
        
        if(format[k-1]=='d')
        {
            i = va_arg(ap, int*);
            
            while((tmp=getc(fp))!=EOF)
            {
                if((tmp>='0' && tmp<='9') || tmp=='-')
                {
                    ungetc(tmp, fp);
                    break;
                }
            }
            
            if(tmp!=EOF)
                count += fscanf(fp, "%d", i);
        }

        if(format[k-1]=='f')
        {
            f = va_arg(ap, float*);
            
            while((tmp=getc(fp))!=EOF)
            {
                if((tmp>='0' && tmp<='9') || tmp=='-')
                {
                    ungetc(tmp, fp);
                    break;
                }
            }
            
            if(tmp!=EOF)
                count += fscanf(fp, "%f", f);
        }
    }
        
    va_end(ap);
    
    return count;
}
2015-03-09 17:53
快速回复:C语言中,如何为可变参数赋值?
数据加载中...
 
   



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

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