文档章节

Head First C学习日志 第七章 创建可变参数的函数

AlexTuan
 AlexTuan
发布于 2016/03/24 01:22
字数 360
阅读 57
收藏 3
c

##让函数能伸缩 为了让函数可以接收可变个数/类型的参数,在此引入 可变参数的函数

宏与函数

宏用来在编译前重写代码,这里引入几个宏va_start,va_list,va_argva_end,宏看起来和函数类似,实际上是一些指令。预处理器在编译前,会根据这些指令插入代码。以上几个宏包含在头文件stdarg.h中。

例程
#include <stdarg.h>
 double total(int args, ...) {
  double total = 0;
  va_list ap;
  va_start(ap, args);
  int i;
  for (i = 0; i < args; i++) {
    enum drink d = va_arg(ap, enum drink);
    total = total + price(d);
  }
  va_end(ap);
  return total;
}

...:省略号代表的是可以接收若干个参数,参数的数量与args一致

va_list:将...处输入的参数放在一个list中,具体的数据结构不需要了解

va_start:C需要知道从哪里开始,需要告诉C最后一个普通参数的名字,在这个例子中是args

va_arg:将参数队列中的元素,以特定的格式找出来,本例中是enum drink

va_end:告诉C你已经读取完成了所有的参数

要点
  • 可变参数保存在va_list中
  • 可以用va_start(),va_end(),va_art()来操作va_list
  • 至少需要一个普通参数
  • 读取参数时,不能超过给出的参数个数
  • 需要知道读取参数的类型

#####代码 stretchy variables function

© 著作权归作者所有

AlexTuan
粉丝 4
博文 27
码字总数 17966
作品 0
程序员
私信 提问
Head First C学习日志 第七章 高级函数 创建函数指针

在c语言中,函数名也是指针变量 函数名是指向函数的指针,当你创建一个叫test的函数的同时,也会创建一个test指针变量,变量中保存了函数的地址。该变量位于常量段。 如何创建函数指针? 假设...

AlexTuan
2016/02/29
73
0
python核心编程-第七章-个人笔记(一)

映射类型-字典 1.0 ①字典是Python中唯一的映射类型,通常认为是可变的哈希表 ②映射类型中的数据是无序排列的 ③方法keys()、values()分别返回键、值组成的列表;items()方法可以得到键、值...

好好先生_1028
2016/01/01
129
0
c++ primer 第五版学习笔记

第二章 函数体外定义的内置类型变量会初始化为0,函数体外的是未初始化的 用constexpr声明变量表示它是一个常量表达式(编译器可以确定的值),且只能应用于字面值 c++11中可以用 来定义一个...

David栗子
2017/12/11
0
0
《Effective Java 第三版》目录汇总

经过反复不断的拖延和坚持,所有条目已经翻译完成,供大家分享学习。时间有限,个别地方翻译得比较仓促,希望有疑虑的地方指出批评改正。 第一章简介 忽略 第二章 创建和销毁对象 1. 考虑使用...

M104
04/04
0
0
Head First C 学习日志 第十章 进程间通信 捕捉信号

Head First C 第十章 进程间通信 捕捉信号 关于信号 信号是操作系统控制程序的方式,举个栗子,操作系统在看到用户输入了Ctrl+C时,就会向程序发送中断信号。信号映射表 | 信号 | 处理函数 ...

AlexTuan
2016/04/17
32
0

没有更多内容

加载失败,请刷新页面

加载更多

云栖干货回顾 | 更强大的实时数仓构建能力!分析型数据库PostgreSQL 6.0新特性解读

阿里云 AnalyticDB for PostgreSQL 为采用MPP架构的分布式集群数据库,完备支持SQL 2003,部分兼容Oracle语法,支持PL/SQL存储过程,触发器,支持标准数据库事务ACID。AnalyticDB PG通过行存...

大涛学弟
6分钟前
2
0
TL138/1808/6748-EasyEVM开发板硬件CPU、FLASH、RAM

TL138/1808/6748-EasyEVM是广州创龙基于SOM-TL138/SOM-TL1808/SOM-TL6748核心板开发的一款开发板。由于SOM-TL138/SOM-TL1808/SOM-TL6748核心板管脚兼容,所以此三个核心板共用同一个底板。开...

Tronlong创龙
10分钟前
1
0
开普勒平台开源版

https://github.com/kplcloud/kplcloud

perofu
14分钟前
1
0
昨天,这项阿里技术再获世界级科技大奖!

第六届世界互联网大会来了!千年水乡古镇乌镇又一次吸引了全世界的目光。 昨天,阿里云自研数据库POLARDB 在会上当选世界互联网领先科技成果。POLARDB解决了企业在云时代的数据库难题,帮助企...

阿里云官方博客
14分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部