一般的函數(shù)的參數(shù)列表都是固定的,但是偶爾也會想要根據(jù)情況使用動態(tài)的列表。
1.可變形參的形式
返回類型 函數(shù)名(第一個參數(shù), ...);
可變形參的函數(shù)如上,需要提供第一個參數(shù),后面用...
2.函數(shù)用到的特殊東西
va_list是一種特殊的指針,在使用可變形參之前,需要定義它。
va_start是用來初始化va_list ,使之指向列表開頭
va_arg,用來取得列表上的值,它的參數(shù)有兩個,一個是va_list指針,另一個是列表參數(shù)類型 ?
取得當前的列表數(shù)據(jù)之后,它會讓指針移動指向下一個目標?? ??? ??? ?
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);
//開始復(fù)制字符串
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.拓展文章來源:http://www.zghlxwxcb.cn/news/detail-552083.html
當然,以上的例子不足以說明問題,僅僅是展示了使用方法。實際上,第一個參數(shù)很重要,它可以指明后面參數(shù)的類型或者其他信息,有很高的靈活性。,比如printf函數(shù)。有興趣可以深入了解。文章來源地址http://www.zghlxwxcb.cn/news/detail-552083.html
到了這里,關(guān)于c語言可變形參的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!