一般的函数的参数列表都是固定的,但是偶尔也会想要根据情况使用动态的列表。
1.可变形参的形式
返回类型 函数名(第一个参数, ...);
可变形参的函数如上,需要提供第一个参数,后面用...
2.函数用到的特殊东西
va_list是一种特殊的指针,在使用可变形参之前,需要定义它。
va_start是用来初始化va_list ,使之指向列表开头
va_arg,用来取得列表上的值,它的参数有两个,一个是va_list指针,另一个是列表参数类型
取得当前的列表数据之后,它会让指针移动指向下一个目标
va_end,收尾工作
3.程序举例
将多个字符串合并在一起
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
char* Strcat(char* first,...){
if(first == NULL)
return NULL;
va_list val;//指向列表的第一位
va_start(val, first);//使val指向first
char* p = NULL;
int len = strlen(first);
while((p = va_arg(val, char*)) != NULL){
len += strlen(p);
}
printf("%d\n",len);
va_end(val);
//分配空间
p = (char*)malloc(len + 1);
char *pb = NULL;
strcpy(p, first);
//开始复制字符串
va_start(val, first);
while((pb = va_arg(val, char*)) != NULL)
{
strcat(p, pb);
}
va_end(val);
return p;
}
int main(int argc, char *argv[]) {
char* p = Strcat("hello", ", ", "wo", "rld", (char*)NULL);
printf("%s\n", p);
free(p);
return 0;
}
4.拓展文章来源:https://www.toymoban.com/news/detail-552083.html
当然,以上的例子不足以说明问题,仅仅是展示了使用方法。实际上,第一个参数很重要,它可以指明后面参数的类型或者其他信息,有很高的灵活性。,比如printf函数。有兴趣可以深入了解。文章来源地址https://www.toymoban.com/news/detail-552083.html
到了这里,关于c语言可变形参的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!