文档章节

C语言中实现可变参数函数

乱蓬头
 乱蓬头
发布于 2017/05/22 14:53
字数 357
阅读 2
收藏 0
点赞 0
评论 0

摘要:   通过stdarg.h头文件为函数提供了定义可变参数列表的能力。声明一个可变参数的函数类似: void f1(int n,...); 其中n表示参数列表个数,而用省略号来表示未知参数列表。stdarg.h中提供了一个va_list类型,用于存放参数。

  通过stdarg.h头文件为函数提供了定义可变参数列表的能力。声明一个可变参数的函数类似:
void f1(int n,...);

其中n表示参数列表个数,而用省略号来表示未知参数列表。stdarg.h中提供了一个va_list类型,用于存放参数。一个大概的使用过程类似:
void f1(int n,...)
{
   va_list ap;
   va_start(ap,n);   //初始化参数列表
   double first=va_arg(ap,double);  //取第一个参数
   int second=va_arg(ap,int);   //取第二个参数
   ...
   va_end(ap);  //清理工作
}
看一个求和的例子:

#include<stdio.h>
#include<stdarg.h>
double sum(int ,);
int main(void)
{
  double s,t;
  s=sum(3,1.1,2.2,13.3);
  t=sum(6,1.1,2.1,13.1,4.1,5.1,6.1);
  printf("return value for "  \
    "sum(3,1.1,2.2,13.3):   %g\n",s);
  printf("return value for " \
    "sum(6,1.1,2.1,13.1,4.1,5.1,6.1):    %g\n",t);
  return 0;
}
double sum(int lim,)
{
  va_list ap;
  double total=0;
  va_start(ap,lim);
  int i;
  for(i=0;i<lim;i++)
      total+=va_arg(ap,double);
  va_end(ap);
  return total;
}


C语言对可变参数的使用还是有点麻烦,不如ruby和java简便。比如ruby中定义并使用可变参数参数:
def sum(*e)
   e.inject{|sum,i| sum+=i}
end

sum(1,2,3,4,5)=>15

本文转载自:http://click.aliyun.com/m/21561/

共有 人打赏支持
乱蓬头
粉丝 0
博文 382
码字总数 2595
作品 0
可变参数函数

如果说C语言具有很多低级语言的特性,那么可变参数函数便是这些特性中的一个。无论是C专家还是C初学者,都对printf标准库函数相当了解,因为它是我们步入C语言的第一个函数。使用printf函数时...

长平狐
2012/09/03
107
0
C语言函数一本道来

函数.png 函数的由来 程序=数据+算法 C程序=数据+函数 模块化程序设计 面向过程的程序设计 以过程为中心的编程思想 首先将复杂的问题,分解为一个个容易的问题 分解过后的问题可以按照步骤一...

PcDack
2017/12/07
0
0
iOS可变参数实现及原理剖析

你一定会时常见到有些方法的最后会有一个无关痛痒的 nil 参数,可曾想过为什么要带这个参数呢。 解答:因为这里参数的传递是可变参数的传递,拿[NSArray arrayWithObjects:]为例子,我们进入他...

JasonMs
2015/10/24
326
0
C 不定长参数

C语言可变参简介 我们在C语言编程中会遇到一些参数个数可变的函数,例如printf()这个函数,它的定义是这样的:    int printf( const char* format, ...);   它除了有一个参数format固定以外...

MrLovelyCbb
2016/09/05
14
0
C语言深入浅出可变参数函数的使用技巧

C语言深入浅出可变参数函数的使用技巧(转) 深入浅出可变参数函数的使用技巧本文主要介绍可变参数的函数使用,然后分析它的原理,程序员自己如何对它们实 现和封装,最后是可能会出现的问题...

Start-up
2012/10/19
0
0
c语言中可变参数的原理---printf()函数

函数原型: int printf(const char format[,argument]...) 返 回 值: 成功则返回实际输出的字符数,失败返回-1. 函数说明: 在printf()函数中,format后面的参数个数不确定,且类型也不确定,这...

GuessRicky
2012/11/21
0
0
Linux编程每周一讲 -可变长度参数

可变长度参数在C语言里面不算什么新鲜的东西,但是它的应用范围很广,属于基础知识范围,因此将这个话题做为系列文章中的第一篇比较合适。 什么是可变长度参数呢?拿printf()来举例: printf...

阿男bluedash
2011/11/29
0
0
C 语言的可变参数表函数的设计

大多数时候,函数中形式参数的数目通常是确定的,在调用时要依次给出与形式参数对应的所有实际参数。但在某些情况下希望函数的参数个数可以根据需要确定。典型的例子有大家熟悉的函数printf(...

qq_38646470
02/02
0
0
C语言变参数函数的原里

一、什么是可变参数 我们在C语言编程中有时会遇到一些参数个数可变的函数,例如printf()函数,其函数原型为: int printf( const char format, ...); 它除了有一个参数format固定以外,后面跟的参...

长平狐
2012/09/03
71
0
C语言的变参函数设计

在C语言中,函数参数的传递方式有值传和址传.值传是把实参的一个专用的、临时的复制值给被调函数中相应的形参被调用函数使用、修改这个传来的复制值,不会影响实参的值.址传则是把变量(实参)...

嗯哼9925
2017/12/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spark Streaming + Kafka Integration Guide

The Spark Streaming integration for Kafka 0.10 is similar in design to the 0.8 Direct Stream approach. It provides simple parallelism, 1:1 correspondence between Kafka partition......

刺猬一号
9分钟前
0
0
数据结构与算法2

一个数组的例子,实现查找,显示和删除的功能。 在这个数组中存储的数据类型是long型,使用long型为的是表明这是数据,而int型被用来表示下标。通常数据结构存储的数据项包含有好几个字段,所...

沉迷于编程的小菜菜
20分钟前
0
0
Python3 基于 requests 批量下载图片

Python3 基于 requests 批量下载图片 import requestsheaders = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Encod......

leeyi
21分钟前
0
0
java获取当前时间所在一周的周一和周日日期

/** * 当前时间所在一周的周一和周日时间 * @param time 当前时间 * @return */ public static Map getWeekDate(String time) { Map map = new HashedMap(); SimpleDateFormat sdf = new Si......

小弱鸡
53分钟前
0
0
Redis数据的导出和导入(dump和load方式)

网上有些文章已经不再适用,本人也是踩了些坑,在此记录下。 迁移redis数据一般有如下3种方式: 第三方工具redis-dump,redis-load aof机制,需要开启aof功能 rdb存储机制 这里介绍第一种方式...

iplusx
58分钟前
2
0
ElasticSearch 高亮显示大文档搜索结果

2016年12月,我们开始研究Ambar——一个文档搜索系统。Ambar使用ElasticSearch作为核心搜索引擎。 在Ambar开发的过程中,我们处理了很多与ES相关的问题,我们想分享我们得到的宝贵经验。让我...

九州暮云
今天
1
0
Python 使用 pywifi 模块 破解wifi密码

git https://github.com/awkman/pywifi 常见常量 from pywifi import const# Define interface status.IFACE_DISCONNECTED = 0IFACE_SCANNING = 1IFACE_INACTIVE = 2IFACE_CONNEC......

阿豪boy
今天
2
0
phpstorm使用Iedis

phpstorm的redis插件Iedis是真好用 看了网上挺多的文章,但是由于我系统还是ubuntu,就有点尴尬了,现在破解之后,留个笔记,即使自己之后有需要也可以很快翻阅 先下载资源 资源下载 zip压缩...

贤郎--均灵
今天
0
0
第三章 spring-bean之FactoryBeanRegistrySupport(4)

前言 从FactoryBeanRegistrySupport类的名字可以看出FactoryBeanRegistrySupport负责FactoryBean的注册与支持。如果想知道FactoryBean相关的资料,请阅读spring-bean中关于FactoryBean的解读...

鸟菜啊
今天
0
0
CentOS “Destination Host Unreachable”问题解决办法

挑战极速安装CentOS时遇到局域网主机不能通信的情况: [root@zjd network-scripts]# ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_seq=1 ttl=......

wffger
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部