2、多参数函数设计方法总结
2015-04-18 17:30
645 查看
// 多参数函数设计1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
double add(char *str,...)
{
va_list marker; //定义该参数指向参数的指针
double result = 0.0; //marker列表的当前值变量
va_start(marker, str);//初始化va_list变量,marker指向堆栈的地址
while(*str)
{
if(*str == '%')
{
switch(*(++str))
{
//判断str的值,然后返回marker列表的当前值,并指向列表的下一个位置
case 'd':result += va_arg(marker, int);//返回可变参数
break;//be careful!
case 'f':result += va_arg(marker, double);
break;
}
}
str++;
}
va_end(marker);//定义marker = ((viod*)0),是marker不再指向堆栈
return result;
}
int _tmain(int argc, _TCHAR* argv[])
{
double result;
result = add("%d%d%f",6,2,4.8);
printf("result = %f\n",result);
system("pause");
return 0;
}
要点:
1、va_list()是C语言中解决可变参数的一组宏。
2、首先定义va_list类型变量,该变量是指向参数的指针。
3、然后用va_start()宏初始化ca_list变量,如va_start(marker, str),这里有两个变量,一个是类型变量marker,另一个用str来指定位置。
4、va_arg()返回可变参数,如add()中返回了输入的具体数值。 va_arg(marker, int)这个返回了输入的具体数值,这里两个参数(类型变量,返回值类型)。
5、va_end()结束可变参数的获取。多个参数,会依次调用 va_arg(marker, int)宏来获取各个参数。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
double add(char *str,...)
{
va_list marker; //定义该参数指向参数的指针
double result = 0.0; //marker列表的当前值变量
va_start(marker, str);//初始化va_list变量,marker指向堆栈的地址
while(*str)
{
if(*str == '%')
{
switch(*(++str))
{
//判断str的值,然后返回marker列表的当前值,并指向列表的下一个位置
case 'd':result += va_arg(marker, int);//返回可变参数
break;//be careful!
case 'f':result += va_arg(marker, double);
break;
}
}
str++;
}
va_end(marker);//定义marker = ((viod*)0),是marker不再指向堆栈
return result;
}
int _tmain(int argc, _TCHAR* argv[])
{
double result;
result = add("%d%d%f",6,2,4.8);
printf("result = %f\n",result);
system("pause");
return 0;
}
要点:
1、va_list()是C语言中解决可变参数的一组宏。
2、首先定义va_list类型变量,该变量是指向参数的指针。
3、然后用va_start()宏初始化ca_list变量,如va_start(marker, str),这里有两个变量,一个是类型变量marker,另一个用str来指定位置。
4、va_arg()返回可变参数,如add()中返回了输入的具体数值。 va_arg(marker, int)这个返回了输入的具体数值,这里两个参数(类型变量,返回值类型)。
5、va_end()结束可变参数的获取。多个参数,会依次调用 va_arg(marker, int)宏来获取各个参数。
相关文章推荐
- 黑马程序员—反射调用main方法的问题总结(涉及可变参数)(反射参数是一个数组的函数要小心)
- 总结的几个Python函数方法设计原则
- 总结的几个Python函数方法设计原则
- Python - 不固定参数函数的定义,四种参数传递方法总结
- JS中把函数作为另一函数的参数传递方法(总结)
- unity中调用dll(char*,以及带有函数指针的参数)方法总结
- 【转】总结C++中取成员函数地址的几种方法
- struts2——action返回参数的方法总结
- C++静态成员变量和静态成员函数的使用方法总结
- 2016书单总结--重构改善既有代码的设计--重新组织函数
- caffe的python接口学习(12):查看属性、方法以及函数参数
- 程序员面试金典——解题总结: 9.17中等难题 17.9设计一个方法,找出任意指定单词在一本书中的出现频率
- stl算法设计理念_函数对象和函数对象当参数和返回值
- 程序员面试金典——解题总结: 9.18高难度题 18.8给定一个字符串s和一个包含较短字符串的数组T,设计一个方法,根据T中的每一个较短字符串,对s进行搜索
- 一个风控计算负载过高到mysql主从拆分暴露的各种设计复杂性问题以及解决方法总结
- 【笔记】js Array.prototype.slice.call(arguments) 将函数的参数转换为数组方法的见解
- 组合数取模常用函数与方法总结
- JavaScript 函数节流详解及方法总结
- golang struct扩展函数参数命名警告解决方法
- ThinkPHP单字母函数(快捷方法)使用总结