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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SpringCloudAlibaba开发的大型电商项目附视频源码

    SpringCloudAlibaba开发的大型电商项目附视频源码

    2020年11月14日
    196
  • pycharm2021.3.3激活 mac破解方法[通俗易懂]

    pycharm2021.3.3激活 mac破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    1.7K
  • 分类变量的卡方检验(python实现&SPSS实现)「建议收藏」

    分类变量的卡方检验(python实现&SPSS实现)「建议收藏」卡方介绍卡方检验是针对自变量和因变量都是分类数据,也就是说带有属性的数据;而单因素方差分析是自变量是分类数据,因变量是连续型的数据。还有一点:方差分析是参数检验,而卡方检验是属于非参数检验。卡方检验是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小:卡方值越大,偏差越大,越趋于不符合;卡方值越小,偏差越小,越趋于符合,若两个值完全相等时,卡方值就为0,表明理论值完全符合。案例介绍本次实验是研究聚类结果和标签DR的关系,即检验我们的聚类有没有意义。

    2022年8月30日
    7
  • URAL 1146

    URAL 1146题目大意:给出一个N*N的矩阵,每个元素的范围为[-127,+127]。求其所有子矩阵中各元素之和的最大值。TimeLimit:1000MS     MemoryLimit:65536KB     64bitIOFormat:%I64d&%I64u数据规模:N理论基础:无。题目分析:求和问题,用前缀和(每一行)+枚举(对列的起始与终点和行的起始与终点枚举)即

    2022年6月9日
    38
  • 关于Http_build_query的用法

    关于Http_build_query的用法

    2021年11月8日
    49
  • Navicat mysql报错 1142 – SELECT command denied to user ‘xxx‘@‘localhost‘ for table ‘user‘

    Navicat mysql报错 1142 – SELECT command denied to user ‘xxx‘@‘localhost‘ for table ‘user‘话我就撂这儿了,只要你认真看完,你就能解决。困了我一天一夜的问题终于解决了,问题也不知道是怎么产生的,点击“用户”或者修改“information_schema”的值就会提示错误,似乎是因为权限不足,错误入下图。首先你要知道数据库的用户是怎么回事。每个数据库都有账号密码,连接特定的数据库需要对应的账号密码,这个很容易理解,PHP里的mysqli_connect你们也用的多了。主机上的…

    2022年10月1日
    10

发表回复

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

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