| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4828 人关注过本帖, 1 人收藏
标题:如果函数参数的数量和类型不确定怎么办?
只看楼主 加入收藏
guopeng2324
Rank: 2
等 级:论坛游民
帖 子:11
专家分:15
注 册:2009-6-17
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:12 
如果函数参数的数量和类型不确定怎么办?
比如一个函数,由于问题不同,在调用这个函数的时候,传递的参数的数量和类型都不确定,这种情况下应该怎么办?有没有什么方法能实现这种函数?
搜索更多相关主题的帖子: 函数的参数 
2009-08-20 21:30
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:1 
C里不支持变参

倚天照海花无数,流水高山心自知。
2009-08-20 21:33
mayudong1
Rank: 2
等 级:论坛游民
威 望:1
帖 子:348
专家分:21
注 册:2006-4-18
收藏
得分:1 
printf,scanf算不算变参的呢

2009-08-20 22:08
guopeng2324
Rank: 2
等 级:论坛游民
帖 子:11
专家分:15
注 册:2009-6-17
收藏
得分:0 
我知道怎么办了,C语言有专门的方法写可变参数函数。
首先要在代码开头包含stdarg.h这个头文件(是标准库的头文件)。在函数的参数列表中,必须至少有一个命名参数,在这个命名参数的后面打省略号,就可以表示可变参数列表,这个时候,使用stdarg.h中声明的类型va_list,和三个宏va_start、va_arg、va_end就可以访问可变参数。
具体的使用方法在网上收索“可变参数”就可以查到,而且使用的方法很简单,大家一定要去学习一下这个好东西啊!
2009-08-21 00:20
龙心
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:14
专家分:159
注 册:2009-8-20
收藏
得分:1 
可以进行函数的重载,不过可能会麻烦点
2009-08-21 09:44
wxjeacen
Rank: 7Rank: 7Rank: 7
等 级:禁止访问
帖 子:1291
专家分:628
注 册:2009-3-22
收藏
得分:1 
c++的cast 可以实现
c可以把类型强制转成void传,传给参数之后再强制转成你需要的类型。

生命不熄,战斗不止.
2009-08-21 09:50
Holy_Bitch
Rank: 2
等 级:论坛游民
帖 子:6
专家分:41
注 册:2009-8-19
收藏
得分:1 
不用这么麻烦的。。。。
你将函数的参数类型设置为void*型,最好在传递的时候传递变量的指针进去。
在函数里面再强制性转化就可以啦
2009-08-21 14:11
iFreeBSD
Rank: 4
等 级:业余侠客
威 望:4
帖 子:474
专家分:236
注 册:2007-11-5
收藏
得分:1 
全局变量

without further ado, let’s get started
2009-08-21 14:14
迷途小淫魔
Rank: 1
等 级:新手上路
帖 子:1
专家分:1
注 册:2009-8-21
收藏
得分:1 
可以定义一个指针变量,用(float *)p来转换变量类型
2009-08-21 14:58
guopeng2324
Rank: 2
等 级:论坛游民
帖 子:11
专家分:15
注 册:2009-6-17
收藏
得分:0 
    5楼的函数重载只能解决一些情况,不能解决全部情况。比如一个函数根据问题的不同,可以接收1~n个任意数量的参数,每个参数的类型假设只有short、char、int、float、double这五种以及他们的指针型,共计10种,那么如果要用函数重载,那么必须要写10+10^2+10^3+……10^n=10(10^n-1)/9个函数,哪怕这个n只有2,也要写110个函数,而到3的时候要写1110个函数,这个工作量是惊人的。
    6 7 9楼的方法只能一定程度上解决参数类型不确定的问题,因为在函数体中,类型转换的结果类型是定好了的,既然是定好了类型,又何谈类型不确定?而且参数数量不确定解决不了。
    8楼的全局变量也有局限,比如一个计算平均值的函数,在不同的时刻输入的数据都不相同。如果这个程序只是给你自己用还好说,每次改一下代码,再编译运行就行了。但是如果是给客户用的话就行不通了,因为客户没办法改代码。
    可变参数函数就能解决这个问题。在可变参数列表中的“……”之前必须至少有一个命名参数,这个命名参数起两个作用,第一是对可变参数的定位,这样va_start这个宏就可以通过它找到可变参数在函数堆栈中的起始位置;第二则是一个必须遵守的原则——这个命名参数必须以一定的形式提示可变参数的数量和类型。举个例子,大家熟悉的scanf()和printf()就是一个典型的可变参数函数,而这两个函数的命名变量就是最开头的那串格式字符串,而这个格式字符串中的各种格式码就提示了后面的可变参数列表中参数的类型和数量。这样,通过命名参数提示的信息,就可以用宏va_arg分别读取后面的可变参数。这样一来,参数的数量和类型不确定的情况便都得到了解决。
2009-08-21 16:33
快速回复:如果函数参数的数量和类型不确定怎么办?
数据加载中...
 
   



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

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