用.net做的网站吗,做电商与做网站的区别,设计一个网页大概多少钱,注册安全工程师有什么用前言
在C语言中#xff0c;我们写函数的时候#xff0c;有可能遇到函数入口参数不确定的问题#xff0c;就可以使用val_list。va_list是为解决变参问题定义的一个类型#xff0c;可以参数的个数不定#xff0c;也可以每个参数的类型不同#xff0c;使用需要包含头文件st…前言
在C语言中我们写函数的时候有可能遇到函数入口参数不确定的问题就可以使用val_list。va_list是为解决变参问题定义的一个类型可以参数的个数不定也可以每个参数的类型不同使用需要包含头文件stdarg.h。 首先给出个例程
#include stdarg.h
#include stdio.hstatic void print_(int num_args, ...) {va_list args;va_start(args, num_args);for (int i 0; i num_args; i) {printf(%d , va_arg(args, int));}va_end(args);
}int main() {print_(3, 1, 2, 3); // 打印显示1 2 3return 0;
}int num_args, …中…表示不定长参数。 va_list 用于表示一个变长参数列表。可以通过宏va_startva_arg和va_end对变长参数列表进行访问和操作。 va_start宏定义用于在使用变长参数函数时获取变长参数的起始地址。它的作用是初始化一个va_list类型的变量使其指向变长参数列表的第一个参数。 va_arg宏定义获取变长参数的当前参数返回指定类型并将指针指向下一参数。 va_end回收变长参数列表指针。
不定长参数的类型也可以不同
void student_print(int num_args, ...) {va_list args;va_start(args, num_args);printf(ID: %d , va_arg(args, int));printf(name: %s , va_arg(args, char*));printf(age: %d , va_arg(args, int));va_end(args);
}int main() {student_print(3, 123, Max, 20); // 打印显示ID: 123 name: Max age: 20return 0;
}val_list经常跟vsnprintf函数用于向一个字符串缓冲区打印格式化字符串配合使用
int vsnprintf (char *__restrict __s, size_t __maxlen,const char *__restrict __format, _G_va_list __arg)那么上面的代码就可以改成
#define SIZE_BUFF 200
void student_print(const char* comment, ...) {va_list args;char sbuf[200];va_start(args, comment);vsnprintf(sbuf, SIZE_BUFF, comment, args);printf(%s\n, sbuf);va_end(args);
}int main() {// student_print(3, 123, Max, 20);student_print(ID: %d name: %s age: %d , 123, Max, 20);return 0;
}