• c 可变参数 定义可变参数的函数


    定义可变参数的函数,需要在stdarg.h头文件中定义的va_list类型和va_startva_argva_end三个宏。

    定义可变参数函数

    va_list ap;  //实际是定义一个指针va_start(ap,num); // 用va_start宏,让ap指向num参数后面的那个参数。

    int i = va_arg(ap,int);  // va_arg(ap,int) 读取ap指向的变量,ap指向下一个参数。读书的数据类型有va_arg的第二个参数控制

    int * p_arg = va_arg(p_va,int*);  // 说明读取的参数是整型指针

    char * p_arg = va_arg(p_va,char*);  // 说明读取的参数是char指针

    va_end(ap);//在函数返回前调用

    看写的例子: 可变参数求和的两种实现

    #include <stdio.h>
    #include <stdarg.h>
    
    int add(int num, ...);
    int add2(int * arg , ...);
    
    int main(){
    	int temp  = add(5,1,2,3,4,5);
    	printf("-->> start result = %d 
    ", temp);
    	printf("
    ");
    
    	int a=1, b=2, c=3, d=4, e=5;
    	temp  = add2(&a,&b,&c,&d,&e,NULL);
    	printf("-->> start result = %d 
    ", temp);
    	return 0;
    }
    
    int add(int num, ...){
    	va_list ap;
    	int result = 0;
    	va_start(ap,num);
    	while(num!=0){
    		int i =  va_arg(ap,int);
    		result += i;
    		printf("-->> i = %d 
    ", i);
    		num--;
    	}
    	va_end(ap);
    	return result;
    }
    
    int add2(int * arg , ...){
    	va_list p_va;
    	int *p_arg = NULL;
    	int result = *arg;
    	va_start(p_va,arg);
    	p_arg = va_arg(p_va,int*);
    	while(p_arg!=NULL){	
    		result = result + *p_arg;
    		printf("-->> *p_arg = %d 
    ", *p_arg);
    		p_arg = va_arg(p_va,int*);
    	}
    	va_end(p_va);
    	return result;
    }
    


    end

  • 相关阅读:
    hadoop mysql install (5)
    hadoop redis install (4)
    hadoop mongodb install(3)
    hadoop hbase install (2)
    水平交错效果显示图像
    实现推拉效果显示图片
    百叶窗效果显示图像
    以椭圆形显示图像
    图像的放大与缩小
    鼠标拖拽图像
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3146731.html
Copyright © 2020-2023  润新知