C++星火03_valist用法

C++星火03_valist用法1背景函数的参数一般是用栈的形式从右向左进行存储的,所以提取时候是从左向右提取例:#includeusingnamespacestd;voidfun(intnCnt,…){int*pTemp=&nCnt;pTemp++;for(inti=0;i{coutpTemp++;}cout}

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定
1 背景

函数的参数一般是用栈的形式从右向左进行存储的,所以提取时候是从左向右提取

例: #include <iostream>
using namespace std;
void fun(int nCnt, …)
{

int *pTemp =&nCnt;
pTemp++;
for (int i = 0; i < nCnt; ++i)
{

cout << *pTemp;
pTemp++;
}
cout << endl;

}


int main()
{

int a = 1;
int b = 2;
int c = 3;
int d =4;
fun(4, a, b, c, d);
system(“pause”);
return 0;
}
输出结果是 : 1 2 3 4 

2 作用
函数的参数可变时可以进行动态的进行处理不需要知道参数的具体值

3 用法
void TextFunc(int nStart, …)
3.1 头文件
#include <stdarg.h>

3.2 定义一个va_list变量并获取参数列表
va_listap;
va_start(
ap, nStart)

3.3 循环获取数据并进行处理
char* szPara;
while(1)
{

szPara = va_arg(ap, char*) //实际获取的类型可以自定义
if(szPara == NULL)//在实际调用的时候最后加一个特定数据表示结束
{

break;
}
…//处理


3.4 结束处理
va_end(ap);

4 举例:显示可变的字符集合

#include 〈stdio.h〉
    #include 〈string.h〉
    #include 〈stdarg.h〉
  
  int demo( char, … );
  void main( void )
  {

     demo(“DEMO”, “This”, “is”, “a”, “demo!”, “”);
  }
  
  int demo( char msg, … )
  {

      
     va_list argp;
     int argno = 0;
     char para;
 
     va_start( argp, msg );
     while (1)
       
  {

         para = va_arg( argp, char);

         if ( strcmp( para, “”) == 0 )

      {

      break;

              }

        printf(“Parameter #%d is: %s\n”, argno, para);
        argno++;
 }
      va_end( argp );
   return 0;
  }

5 注意

1 参数的类型是用户自己定义的所有要一一对应 
2     最后要加一个特殊的数据表示参数的结束

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/215453.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Tabnine Pro 激活码(破解版激活)「建议收藏」

    Tabnine Pro 激活码(破解版激活),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 共轭函数_复共轭函数

    共轭函数_复共轭函数定义设函数,定义函数为此函数称为函数f的共轭函数,使上述上确界有限,即差值在domf有上界的所有构成了共轭函数的定义域,下图描述了此定义(图中y即为公式中的t)。xy相当于是以y为斜率且过原

  • 【Redis缓存机制】1.Redis介绍和使用场景

    【Redis缓存机制】1.Redis介绍和使用场景

    2021年10月31日
  • 克莱姆法则应用_克莱姆和克拉默法则

    克莱姆法则应用_克莱姆和克拉默法则克莱姆法则(由线性方程组的系数确定方程组解的表达式)是线性代数中一个关于求解线性方程组的定理,它适用于变量和方程数目相等的线性方程组。概念含有n个未知数的线性方程组称为n元线性方程组。1)当其右端的常数项b1,b2,…,bn不全为零时,称为非齐次线性方程组:其中,A是线性方程组的系数矩阵,X是由未知数组成的列向量,β是由常数项组成的列向量。非齐次线性方程组的矩阵形式:2)当常数项全为零…

  • 简述OTA测试「建议收藏」

    简述OTA测试「建议收藏」一、什么是OTA测试?  OTA测试是与RF传导测试相对应的,但与大家经常接触的RF传导有一些差异。  从连接控制方式看:  RF传导测试,是通过射频线将DUT直连到测试仪表的连接方式实现,如果有测试仪表就较容易实现。  而OTA测试,是通过“overtheair”方式实现与测试仪表连接,除了需要测试仪表,还需要有OTAchamber,以及实现控制DUT和测试仪表的OTA系统软件。  RFOTA(OverTheAir)测试会模拟产品的无线信号在空气中的传输场景,而此种测试

    2022年10月23日
  • caller与callee[通俗易懂]

    caller与callee[通俗易懂]这两个对象,是用于判断函数调用和执行的对象函数的。其中,arguments.callee返回当前正在执行的函数,func.caller返回函数的调用体所在函数。而arguments.caller永远返回undefined。如果调用函数是在全局进行,那么func.caller将返回null。注意,在严格模式下这两个对象将被禁用。我们举刚才的一个代码为例:[javascri

    2022年10月25日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号