关闭

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

129人阅读 评论(0) 收藏 举报
分类:
#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;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5809次
    • 积分:370
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条