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     最后要加一个特殊的数据表示参数的结束

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python OpenCV findContours()函数与drawContours()函数用法

    Python OpenCV findContours()函数与drawContours()函数用法我用的Python3.6,OpenCV3.4。Python3.x与2.x语法不一样,OpenCV2.x与3.x也不一样。看之前得清楚自己用的啥。本文说白了就是个简单的查找轮廓,并且绘制轮廓。简单说一下这俩个函数用法。函数cv2.findContours()有三个参数。第一个是输入图像,第二个是轮廓检索模式,第三个是轮廓近似方法。而返回值根据OpenCV版本不同也不一样,但这俩个版本都会返回…

    2022年10月25日
    0
  • 【转】Java enum的用法详解「建议收藏」

    【转】Java enum的用法详解

    2022年2月22日
    34
  • OC中语法糖,最新语法总结

    OC中语法糖,最新语法总结

    2022年1月30日
    45
  • 游戏开发完整流程

      1. 立项   Ø 一个项目立项的原因可能性非常多,有可能是公司拿到一个好的IP,也有可能是几个负责人有个很棒的idea,亦或是老板的梦想是做一个XX类型的游戏,这边不做过多的讨论。   Ø 立项过程中应该包含市场调查和产品定位,需要分析当前市场并且预测未来市场趋势,同时还要知道产品面对的对象以及这些对象应该有的特征、消费习惯等等。  …

    2022年4月5日
    360
  • 简述springboot自动配置_如何配制溶液

    简述springboot自动配置_如何配制溶液阅读收获:+1|type_1_2:理解SpringBoot自动配置原理SpringBoot是什么SpringBoot的诞生就是为了简化Spring中繁琐的XML配置,其本质依然还是Spring框架,使用SpringBoot之后可以不使用任何XML配置来启动一个服务,使得我们在使用微服务架构时可以更加快速的建立一个应用。简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式。SpringBoot的特点 提供了固定的配置来简化配置…

    2022年8月21日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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