IOS之学习笔记六(可变形参)
【摘要】 1、实现函数的可变形参
1)、va_list:这是一个可变类型,用于定义指向可变参数列表的指针变量
2)、va_start:让argList指向一个可变参数列表的第一个参数
3)、提取argList当前指针指向的参数,并且将指针指向下一个参数
4)、释放argList指针,结束提取
2、测试代码
A...
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;
-
}
文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。
原文链接:chenyu.blog.csdn.net/article/details/80945676
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)