| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2161 人关注过本帖
标题:重磅炸弹-c语言变参函数
只看楼主 加入收藏
lingluoz
Rank: 2
来 自:苏州科技学院
等 级:新手上路
威 望:4
帖 子:749
专家分:0
注 册:2008-2-2
结帖率:100%
收藏
 问题点数:0 回复次数:11 
重磅炸弹-c语言变参函数
c语言变参函数
lingluoz
08-06-14

什么是变参函数
变参函数就是像printf()一样,参数数量可变的一种函数,c语言里面可以通过头文件stdarg.h来支持这种函数
这一类函数的原形是,
类型 函数名(类型 第一个参数,...)
拿printf做例子
int printf (const char * format,...)

*特别注意的一点就是c语言里面变参函数必须有一个或以上的已知参数,在函数变参数的前面,比如
int f(...)
int f(...,int i)
是错误的
int f(int i,...)
是正确的

好了,不给大家卖关子了,直接挂代码
*这个我懒得转成高亮的了,大家将就一下吧:P

1.c

/*****************************************************************
** HighlightCodeV3.0 software by yzfy(雨中飞燕) http:// **
*****************************************************************/
#include <stdio.h>
#include <stdarg.h>  /*最主要的就是这个头文件了*/
#include <stdlib.h>  /*这个和变参函数一点关系也没有,这个是我为了防止
                    屏幕一闪而过调用system("pause")用的*/


#define _max_args 31  /*定义参数的最大值*/

int sum(int n_param,...)
{
   
va_list ap;  /*定义一个参数列表*/
   
int i;
    int s=0;
    if (n_param>_max_args)
        n_param=_max_args;
    va_start(ap,n_param);  /*开始读取变量,n_param表示从变量n_param后面开始读取*/
   
for (i=0;i<n_param;i++)
        s=s+va_arg(ap,int); /*va_arg表示从...里面读取一个int类型变量,然后把ap指向
                            下一个变量*/
   
va_end(ap); /*不要忘记这个哦*/
   
return s;
}

int main()
{
   
printf("%d",sum(5,1,2,3,4,5));
    system("pause");
    return 0;
}


*试试看 是不是15啊
sum(n_param,...)就是把 它后面的从第二个参数开始的n_param个int型变量相加
你可以改成sum(3,1,2,3)试试:)

[[it] 本帖最后由 lingluoz 于 2008-6-14 15:00 编辑 [/it]]
搜索更多相关主题的帖子: 函数 c语言 重磅 int 炸弹 
2008-06-14 14:34
Loli
Rank: 1
来 自:飞燕算法群46520219
等 级:新手上路
帖 子:348
专家分:0
注 册:2008-5-27
收藏
得分:0 
/*****************************************************************
** HighlightCodeV3.0 software by yzfy(雨中飞燕) http:// **
*****************************************************************/
#include <stdio.h>
#include <stdarg.h>  /*最主要的就是这个头文件了*/
#include <stdlib.h>  /*这个和变参函数一点关系也没有,这个是我为了防止
                    屏幕一闪而过调用system("pause")用的*/


#define _max_args 31  /*定义参数的最大值*/

int sum(int n_param,...)
{
   
va_list ap;  /*定义一个参数列表*/
   
int i;
    int s=0;
    if (n_param>_max_args)
        n_param=_max_args;
    va_start(ap,n_param);  /*开始读取变量,n_param表示从变量n_param后面开始读取*/
   
for (i=0;i<n_param;i++)
        s=s+va_arg(ap,int); /*va_arg表示从...里面读取一个int类型变量,然后把ap指向
                            下一个变量*/
   
va_end(ap); /*不要忘记这个哦*/
   
return s;
}

int main()
{
   
printf("%d",sum(5,1,2,3,4,5));
    system("pause");
    return 0;
}


那我帮你吧


[color=white]
2008-06-14 14:37
lingluoz
Rank: 2
来 自:苏州科技学院
等 级:新手上路
威 望:4
帖 子:749
专家分:0
注 册:2008-2-2
收藏
得分:0 
你这个程序哪里可以下载啊

Murphy's Law :
If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it.
2008-06-14 14:43
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
你找她要好了。。这是她自己写的。。

学习需要安静。。海盗要重新来过。。
2008-06-14 14:44
Loli
Rank: 1
来 自:飞燕算法群46520219
等 级:新手上路
帖 子:348
专家分:0
注 册:2008-5-27
收藏
得分:0 
2008-06-14 15:41
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
貌似不用这么麻烦,直接用个char *做参数,每次将移动2个字节,知道其等于null

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2008-06-14 17:28
lingluoz
Rank: 2
来 自:苏州科技学院
等 级:新手上路
威 望:4
帖 子:749
专家分:0
注 册:2008-2-2
收藏
得分:0 
果然是版主。这种方法不错。。

Murphy's Law :
If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it.
2008-06-14 22:21
yyow3193
Rank: 1
来 自:三峡宜昌
等 级:新手上路
帖 子:165
专家分:0
注 册:2008-6-5
收藏
得分:0 
va_list ap;  /*定义一个参数列表*/


这是什么意思啊,,,我把C看完了怎么不知道还有定义参数列表的啊
2008-06-14 22:39
Loli
Rank: 1
来 自:飞燕算法群46520219
等 级:新手上路
帖 子:348
专家分:0
注 册:2008-5-27
收藏
得分:0 
[bo][un]卧龙孔明[/un] 在 2008-6-14 17:28 的发言:[/bo]

貌似不用这么麻烦,直接用个char *做参数,每次将移动2个字节,知道其等于null

有时会出问题的,还是在最开头加个表示长度的数比较保险
或者自己写一个参数类。。。不过va_list是标准做法。。。



[color=white]
2008-06-14 22:44
lingluoz
Rank: 2
来 自:苏州科技学院
等 级:新手上路
威 望:4
帖 子:749
专家分:0
注 册:2008-2-2
收藏
得分:0 
这个普通的书上是没有的。。因为很偏。我是死坑C99的英文文档才搞出来的。。然后创建参数表是一本解释linux代码的书上这样注释类似语句的
实际上关于c语言。大家不知道的还很多

Murphy's Law :
If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it.
2008-06-14 22:49
快速回复:重磅炸弹-c语言变参函数
数据加载中...
 
   



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

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