objective-c基础之可变参数列表va_list

原创 2015年11月20日 11:04:19
#import <Foundation/Foundation.h>

@interface VarArgs : NSObject

- (void)test:(NSString *)name,...;

- (int)test2:(int)num1,...;
@end

@implementation VarArgs

- (void)test:(NSString *)name, ...
{
    va_list arglist;//定义一个va_list指针变量,指向参数列表
    if(name)
    {
        NSLog(@"%@",name);
        va_start(arglist, name);//让arglist指向可变参数列表的第一个参数,开始提取可变参数列表的参数
        NSString *arg = va_arg(arglist, NSString*);//提取当前arglist指向的参数,并移动指针,指向一个参数
        
        while(arg)//循环提取参数,直到参数nil
        {
            NSLog(@"%@",arg);
            arg = va_arg(arglist, NSString *);
        }
        va_end(arglist);//释放arglist指针,结束提取
    }
}

//可变参数中,核心的:va_list : 可变参数列表的指针
//                 va_start : 指向参数列表的第一个参数
//                va_arg(va_list, type),提取参数,并指向下一个参数
//                va_end  结束提取,释放指针



- (int)test2:(int)num1,...
{
    va_list numList;
    va_start(numList, num1);
    
    int sum  = 0;
    sum += num1;
    int a = va_arg(numList, int);
    while(a)
    {
        sum += a;
        a = va_arg(numList, int);
    }
    //NSLog(@"%d",sum);
    va_end(numList);
    return sum;
}
@end


int main() {

     VarArgs *va = [[VarArgs alloc] init];
    //[va test:@"你瞅啥",@"瞅你咋滴",@"再瞅一次试试",nil];
    
    int sum = [va test2:2,3,4,5];
    NSLog(@"%d",sum);
    
    
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Objective-c 可变参数列表缺陷

oc的可变参数列表用起来不是一般的麻烦,需要使用va_list  va_start  va_end    va_arg ,  还需要各种判断。java中就没这么麻烦,java中可变参数列表会自动转换成...

C/C++(6)va_list、va_start、va_arg、va_end实现可变参数列表函数

经典的可变参数表printf函数的实现原理:在C/C++中,对函数参数的扫描是从后向前的。 函数参数是通过压入堆栈的方式来给函数传参数的,最先压入的参数最后出来,而栈是从内存的高地址向低地址存放的,...

可变参数列表 va_list

可变参数列表,指的是函数的参数个数是可变的,但我们写一个子函数实现某个功能的时候,我们通常通过实参和形参的形式把参数传递給子函数。而可当我们使用va_list变参数列表的时候形参和实参的传递就变得相对...

C++可变参数列表处理宏va_list、va_start、va_end的使用

VA_LIST是在C语言中解决变参问题的一组宏他有这么几个成员: 1)va_list型变量: #ifdef     _M_ALPHA typedef    struct{ ch...

可变参数列表的函数调用 va_list va_start va_arg va_end

当无法列出函数所有形参的类型和数目时,可用省略号指定参数表,例如:            void foo(...);       &#...

fprintf 的封装(vsprintf,va_start(), va_arg(), va_end()可变参数列表)

http://www.cnblogs.com/leaven/archive/2010/06/29/1767374.html  首先我们来看一个封装的实例:Code highlighting produ...

C可变参数 va_list 详解

VA_LIST 是在C语言中解决变参问题的一组宏 有这么几个成员: 1) va_list型变量: #ifdef  _M_ALPHA typedef struct {       ...

c函数va_list可变参数原理

首先了解一下什么是va_list,使用va_list需要包含:#include 头文件 #ifdef _M_ALPHA typedef struct { char *a0; /* pointer...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)