1、实现函数的可变形参
1)、va_list:这是一个可变类型,用于定义指向可变参数列表的指针变量
2)、va_start:让argList指向一个可变参数列表的第一个参数
3)、提取argList当前指针指向的参数,并且将指针指向下一个参数
4)、释放argList指针,结束提取
2、测试代码
Args.h
#ifndef Args_h
#define Args_h
#import <Foundation/Foundation.h>
@interface Args : NSObject
-(void)test:(id)name,...;
@end
#endif /* Args_h */
Args.m
#import <Foundation/Foundation.h>
#import "Args.h"
@implementation Args
-(void)test:(id)name,...
{
//va_list:这是一个可变类型,用于定义指向可变参数列表的指针变量
va_list argList;
if (name)
{
NSLog(@"%@",name);
//va_start:让argList指向一个可变参数列表的第一个参数
va_start(argList,name);
//提取argList当前指针指向的参数,并且将指针指向下一个参数
Nsstring *arg = va_arg(argList,id);
while (arg)
{
NSLog(@"%@",arg);
arg = va_arg(argList,id);
}
//释放argList指针,结束提取
va_end(argList);
}
}
@end
main.m
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "Person.h"
#import "Apple.h"
#import "User.h"
#import "Args.h"
#import "KVCPerson.h"
int main(int argc,char * argv[]) {
@autoreleasepool {
Args *arg = [Args new];
[arg test:@"chenyu",@"chenxuan",@"chencaifeng",nil];
}
}
3、运行结果
chenyu
chenxuan
chencaifeng
4、对比总结
这个oc里面和c语言里面的实现差不多如下面的代码
#include <stdio.h>
#include <stdarg.h>
void PrintLines(char *first,...)
{
char *str;
va_list v1;
str = first;
va_start(v1,first);
do
{
printf("%s\n",str);
str=va_arg(v1,char*);
} while (str != NULL );
va_end(v1);
}
int main(int argc,char* argv[])
{
PrintLines("First1","Second2","Third3","Fourth4",NULL);
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。