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;
}

关于可变的参数列表va_list的笔记

案例代码: int CDECL MessageBoxPrintf (TCHAR * szCaption, TCHAR * szFormat, ……) { TCHAR szBuffer [...
  • benjamin721
  • benjamin721
  • 2016年01月14日 16:00
  • 376

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

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

ios 可变参数(va_list,va_start,va_end)

原文地址:ios 可变参数(va_list,va_start,va_end) 例如:UIAlertView的init方法中的otherButtonTitles:(NSString *)oth...
  • u012894479
  • u012894479
  • 2015年06月23日 15:18
  • 1732

Objective-C中实现变长参数问题

ObjC中没有提供直接的变长参数方法,需要使用C标准库中的av_list方法,简单使用如下: -(void)somethingForyou:(NSString *)vString,....{ v...
  • yangxt
  • yangxt
  • 2012年11月19日 10:50
  • 2666

可变参数列表 va_list

可变参数列表,指的是函数的参数个数是可变的,但我们写一个子函数实现某个功能的时候,我们通常通过实参和形参的形式把参数传递給子函数。而可当我们使用va_list变参数列表的时候形参和实参的传递就变得相对...
  • zhang1308299607
  • zhang1308299607
  • 2017年05月01日 09:50
  • 174

iOS 使用可变参数va_list, 定义一个方法

- (void)inWithColumns:(NSString *)firstColumnName, ... { NSMutableArray *arrays = [NSMutableArra...
  • vinzry
  • vinzry
  • 2016年01月26日 16:38
  • 1958

OC基础-零基础学习Objective-C:第一部分.类和对象

本人也是Objective-C的小白,以下只是记录我学习过程的历程,如有不对的地方或者疑问欢迎指正。 原发表在新浪微博上,现转移到这里 必备工具: 1.一本书,建议《Objective-C基础教程...
  • l522402543
  • l522402543
  • 2015年08月28日 21:45
  • 991

语法基础——Objective-C语法基础

iOS基础——Object-C基础 学习过Swift之后,好久没用已经生疏了,现在有项目来了,不得不停下手下的工作,开始学习OC (1)...
  • qq_30379689
  • qq_30379689
  • 2017年02月21日 19:37
  • 2903

Objective-C 2.0 基础要点归纳

本文的阅读基本条件: 具备C/C++基础知识,了解面向对象特征 阅读过《Objective-C 2.0 程序设计(第二版)》、《Objective-C 程序设计 第6版》或相关基础OC书籍 知识要点...
  • gujinjin2008
  • gujinjin2008
  • 2015年07月18日 20:11
  • 1613

Objective-C入门基础

Objective-C是一种简单的计算机语言,设计为可以支持真正的面向对象编程。Objective-C通过提供类定义,方法以及属性的语法,还有其他可以提高类的动态扩展能力的结构等,扩展了标准的ANSI...
  • u011877416
  • u011877416
  • 2013年10月26日 10:45
  • 4173
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:objective-c基础之可变参数列表va_list
举报原因:
原因补充:

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