`

c++ 传递不定长参数_void类型参数_调用系统

    博客分类:
  • flex
阅读更多
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>//传递不定长参数
int test(void *buf){ //类似object类型
    printf("%s",buf);
}
int add(int,...);
int main(){
    test((void*)("test void *buf args测试void类型的参数"));
    char *path=getenv("path");//得到环境变量
    printf("path的环境变量%s",path);


   /*
 函数返回给定的命令字符串command 进行系统调用。如果命令执行正确通常返回零值。
    如果command 为 NULL, system()将尝试是否有可用的命令解释器。 如果有返回非零值,否则返回零值。
    相关主题:
*/

    system("g++ test.cpp -o testSystem"); //执行系统进程??
    
    
    add(3,22,23,24);//调用可变参数的方法,第一个参数是参数个数,后边是各个参数

}

int add(int a,...){
    int result=-1;
    va_list argptr;
    
    va_start(argptr,a);
    for(;a>0;a--){
        int args=va_arg(argptr,int);
        printf("参数是%d\n",args);
    }
    va_end(argptr);
    
    return result;
    

}
/*
#include <stdarg.h>  type va_arg( va_list argptr, type );  void va_end( va_list argptr );  void va_start( va_list argptr, last_parm );
功能: 宏va_arg()用于给函数传递可变长度的参数列表。
首先,必须调用va_start() 传递有效的参数列表va_list和函数强制的第一个参数。第一个参数代表将要传递的参数的个数。
其次,调用va_arg()传递参数列表va_list 和将被返回的参数的类型。va_arg()的返回值是当前的参数。
再次,对所有的参数重复调用va_arg()
最后,调用va_end()传递va_list对完成后的清除是必须的。
For example:

    int sum( int, ... );

    int main( void ) {



      int answer = sum( 4, 4, 3, 2, 1 );

      printf( "The answer is %d\n", answer );



      return( 0 );

    }



    int sum( int num, ... ) {

      int answer = 0;

      va_list argptr;



      va_start( argptr, num );

      for( ; num > 0; num-- )

        answer += va_arg( argptr, int );



      va_end( argptr );

      return( answer );

    }

这段代码显示10,他们是4+3+2+1。*/

 

分享到:
评论

相关推荐

    不定参数函数1.pdf

    这类函数在C或C++语言中广泛应用于需要传递不确定数量参数的场景。为了编写这样的函数,需要使用一种特殊的机制来处理可变数量的参数。在C语言中,这一机制主要由stdarg.h头文件中定义的一系列宏来提供。 首先,...

    嵌入式C_C++语言精华.pdf

    void类型的意义** - `void` 类型通常用于表示“无类型”或“空类型”。在函数原型声明中,它可以表示函数不返回任何值。 - `void*` 是一种特殊的指针类型,可以指向任何类型的对象,但在使用前必须显式转换为目标...

    C_C++编程嵌入式精华

    2. **Void指针的应用:** `void *`常用于需要传递未知类型指针的场合,例如函数参数、内存分配函数等。 #### 六、C/C++语言可变参数表深层探索 **知识点:** 1. **可变参数表的概念:** 可变参数表是指函数可以...

    c++11可变参数使用示例

    C++11是C++语言的一个重要版本更新,它引入了许多新特性,其中包括对可变参数模板(Variable Argument Templates)的支持。可变参数模板是一种强大的工具,允许函数或类模板接受一个可变数量的参数。这在编写通用的...

    C++程序设计习题大荟萃(免费下载).pdf

    - `void`表示函数没有返回值,也可以用作函数参数类型,表示没有参数或参数类型未知。 - `...`是可变参数列表的表示,通常与`va_list`、`va_start`、`va_end`等一起用于处理不定数量的参数。 8. **I/O操作**: -...

    使用C(C++)扩展 Python(中文文档)

    通过这种方式,您可以利用C/C++的强大性能来实现Python难以完成的任务,比如直接调用C库函数或者进行系统调用。 ##### 创建扩展模块 首先,我们来创建一个名为`spam`的简单扩展模块,该模块将调用C库中的`system()...

    嵌入式C C++语言精华.pdf

    - **知识点一:void类型的理解** - `void`关键字在C/C++中有特殊的用途,常用于声明函数没有返回值或指针不指向任何特定类型的对象。 - **知识点二:void指针的用途** - `void*`指针可以用来存储任何类型的指针值...

    秒懂参数如何具体运用的介绍

    参数(Parameter)是函数或方法声明的一部分,用来接收调用时传递的值。它们可以分为形式参数(Formal Parameter)和实际参数(Actual Parameter)。形式参数是在函数定义中使用的,实际参数则是在函数调用时提供的...

    任意重循环(循环阶数不定、循环层数不定) c++ 代码 原创

    本文将详细介绍这种类型的循环,并提供一个原创的C++实现。 任意重循环的核心在于它能适应各种不同的循环需求,无论是两层、三层还是更多层,甚至可以在运行时根据条件决定循环的深度。这种灵活性使得程序员能够更...

    函数函数与运算符的重载PPT课件.pptx

    调用时,编译器会根据函数名找到相应的函数定义,并对比实参和形参的数量、类型和顺序是否匹配,然后按照参数类型(值参数或引用参数)进行参数传递。接着执行函数体的代码,最后返回调用点并可能带回函数值。 ...

    嵌入式C_精华

    - **void类型的意义:** 表示“无类型”,常用于函数返回值表示无返回值,或用于指针类型表示空指针。 - **void指针的使用:** void指针可以指向任何类型的对象,但需要显式转换为目标类型后才能解引用。 **案例...

    嵌入式c语言精华

    - **示例**: 如果有一个C语言编写的库函数`void foo(int x)`,在C++中调用它时,可以这样声明: ```cpp extern "C" void foo(int x); ``` #### 四、C语言高效编程的几招 - **技巧**: - 利用位运算提高效率。 ...

    嵌入式C精华.pdf

    - **void类型**:`void`是一种特殊的类型,它没有具体的值,常用于函数返回类型或指针类型。 - **void指针**:`void*`指针可以指向任何类型的对象,但要访问该对象时必须显式转换为正确的类型。 - **应用场景**:`...

    2021-2022计算机二级等级考试试题及答案No.18460.docx

    20. **Python函数参数**:Python中的`*args`用于接收不定数量的位置参数,调用`fun1(1,2,3,4,5,6)`会打印1, 2, (3, 4, 5, 6)。 21. (由于题目不完整,无法给出第21题的解答,但通常这类问题会涉及到函数调用、参数...

    C语言编程 电子文档

    C语言支持可变参数函数,允许函数调用时传递不定数量的参数。 #### 实现 - 使用`&lt;stdarg.h&gt;`库。 - `va_list`类型用于存储参数列表。 - `va_start`, `va_arg`, `va_end`宏用于处理参数列表。 ### C程序内存中组成...

    c#学习笔记.txt

    如果没有ref,out则默认为值传递,虽然可以在方法中修改这个参数的值,但是修改后的值不会还会到调用该方法的程序中. params :params 关键字可以指定在参数数目可变处采用参数的方法参数 ref :引用传递 out : 7, ...

Global site tag (gtag.js) - Google Analytics