20190723_C中的调用可变函数
今天联系了 C 中调用可变参函数
参考网站:https://www.runoob.com/cprogramming/c-standard-library-stdarg-h.html
代码1: 向被调用函数中传递3个int类型参数,并在被调用函数中输出
//可变参数 test 1
#include <stdio.h>
#include <stdarg.h>
#include <string.h> #pragma warning(disable:4996) void tLog(int sInfo, ...); int main()
{
int x1 = ;
int x2 = ;
int x3 = ; int sInfo = ; tLog(sInfo, x1, x2, x3); system("pause");
return ;
} void tLog(int sInfo, ...)
{
int sx1 = ;
int sx2 = ;
int sx3 = ; //step1: 申请参数列表变量
va_list sArgv; //step2: 申明最后一个传递给函数的已知的固定参数
//这里是 sInfo = 0
va_start(sArgv, sInfo); /* step3: 依次读取固定参数 sInfo 后的 参数 */
sx1 = va_arg(sArgv, int);
sx2 = va_arg(sArgv, int);
sx3 = va_arg(sArgv, int); va_end(sArgv);
printf("运行输出:[%d, %d %d %d]\n", sInfo, sx1, sx2, sx3);
} /*
运行输出:[0, 1 2 3]
*/
代码2:向被调用函数中传递3个char* 类型参数,并在被调用函数中输出
//可变参数 test 1
#include <stdio.h>
#include <stdarg.h>
#include <string.h> #pragma warning(disable:4996) void tLog2(char* sInfo, ...); int main()
{
char* str1 = "abc";
char* str2 = "xyz";
char* str3 = "yyh"; char* sInfo = "start"; tLog2(sInfo, str1, str2, str3); system("pause");
return ;
} void tLog2(char* sInfo, ...)
{
char* s1 = (char*)malloc();
char* s2 = (char*)malloc();
char* s3 = (char*)malloc(); /*
step 1,定义指向参数列表的变量 arg_ptr
申请参数列表变量
*/
va_list sArgv; /*
step 2, 将 arg_ptr 变量初始化,让他指向参数列表得起始 i
// 申明最后一个传递给函数的已知的固定参数
*/
va_start(sArgv, sInfo); /*
step 3, 依次读取固定参数 sInfo 后的 参数
*/
s1 = va_arg(sArgv, char*);
s2 = va_arg(sArgv, char*);
s3 = va_arg(sArgv, char*); /*
step 4,清理工作
*/
va_end(sArgv); printf("运行输出:[%s,%s %s %s]\n", sInfo, s1, s2, s3); } 输出结果
/*
运行输出:[start,abc xyz yyh]
*/
20190723_C中的调用可变函数的更多相关文章
- C中如何调用C++函数、类内函数 \混编\链接
在C中如何调用C++函数的问题,简单回答是将函数用extern "C"声明,当被问及如何将类内成员函数声明时,一时语塞,后来网上查了下,网上有一翻译C++之父的文章可以作为解答,遂 ...
- C++构造函数中不能调用虚函数
在构造函数中调用虚函数,并不会产生多态的效果,就跟普通函数一样. c++ primer 第四版中497页15.4.5构造函数和析构中的虚函数讲到,如果在构造函数或析构函数中调用虚函数,则运行的是为构造 ...
- html中事件调用JavaScript函数时有return与没有return的区别
JAVASCRIPT在事件中调用函数时用return返回值实际上是对window.event.returnvalue进行设置. 而该值决定了当前操作是否继续.当返回的是true时,将继续操作.当返回是 ...
- C#中通过调用Dll函数时,执行一段时间后,就会报内存可能被破坏的错的解决办法
遇到同样的问题,已经解决的:http://blog.csdn.net/youxiazzz12/article/details/24313347
- js中被调用的函数获取调用者对象
通过event.srcElement即可.一直用了很久的传参,终于解决了.
- 09——绝不在构造和析构函数中调用virtual函数
在base class构造期间,virtual函数不是virtual函数. 构造函数.析构函数中不要调用virtual函数.
- [置顶] lua 进阶3--lua文件中调用C++函数
前面讲了一下,C++读取lua文件中的变量,包括一维表.二维表这些,这节讲一下如何在lua文件中去调用C++函数 C++代码如下 #include <stdio.h> extern &qu ...
- 【校招面试 之 C/C++】第10题 C++不在构造函数和析构函数中调用虚函数
1.不要在构造函数中调用虚函数的原因 在概念上,构造函数的工作是为对象进行初始化.在构造函数完成之前,被构造的对象被认为“未完全生成”.当创建某个派生类的对象时,如果在它的基类的构造函数中调用虚函数, ...
- VC/MFC中通过CWebPage类调用javascript函数(给js函数传参,并取得返回值)
转自:http://www.cnblogs.com/javaexam2/archive/2012/07/14/2632959.html ①需要一个别人写好的类CWebPage,将其对于的两个文件Web ...
随机推荐
- 一个企图用来进行前端交流的qq群
我建了一个企图用来进行前端交流的qq群! 希望各位前端开发攻城狮们加入! 大佬.小白都欢迎! 禁广告党! 只是想有一个纯净的环境去讨论一下大家遇到的问题和行业前景之类的话题. 661270378 期待 ...
- Java 并发编程(三):如何保证共享变量的可见性?
上一篇,我们谈了谈如何通过同步来保证共享变量的原子性(一个操作或者多个操作要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行),本篇我们来谈一谈如何保证共享变量的可见性(多个线程访问同一个变 ...
- android设置透明状态栏
先是半透明效果(两种方法): 第一种(简单): //直接将下面的代码放在activity中的setContentView(R.layout.activity_main);中之前就行了 if (Buil ...
- B-概率论-极大似然估计
[TOC] 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ ...
- 【TencentOS tiny】 超详细的TencentOS tiny移植到STM32F103全教程
移植前的准备工作 1. 获取STM32的裸机工程模板 STM32的裸机工程模板直接使用野火STM32开发板配套的固件库例程即可.可以从我github上获取https://github.com/jiej ...
- 安装Elasticsearch可视化插件
背景 项目中使用Elasticsearch , 最开始14年使用的时候需要es自己安装插件才能通过web页面查看数据情况,目前新版本的ES安装插件很费劲,通过搜索发现目前谷歌浏览器就有这个插件,这里简 ...
- java并发基础及原理
java并发基础知识导图 一 java线程用法 1.1 线程使用方式 1.1.1 继承Thread类 继承Thread类的方式,无返回值,且由于java不支持多继承,继承Thread类后,无法再继 ...
- Java学习笔记之抽象类与接口
抽象类(abstract) 抽象类概述:一个类被abstract修饰表示这个类是抽象类, 自己定义方法但是不实现方法,后代去实现 抽象方法: 一个方法被abstract修饰表示这个方法是抽象方法 ...
- PHP 插入排序 -- 直接插入排序
1)直接插入序 -- Straight Insertion Sort 时间复杂度 :O(n^2) 适用条件: 适合记录数不多的情况 1 <?php 2 $a = [0 =>3,4,5,1, ...
- Django RESRframework奇淫技巧
Django RESRframework Mixins, ViewSet和router配合使用 Mixins的类共有五种 CreateModelMixin ListModelMixin Retriev ...