程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c語言中對可變參數列表的簡單理解

c語言中對可變參數列表的簡單理解

編輯:關於C語言

c語言中對可變參數列表的簡單理解


函數原型中一般情況下參數的數目是固定的,但是如果想在不同的時候接收不定數目的參數時該怎麼辦呢?c語言提供了可變參數列表來實現。 可變參數列表是通過宏來實現的,這些宏定義在stdarg.h的頭文件中。頭文件中聲明了一個va_list類型和va_start、va_arg、va_end三個宏。我們使用可變參數列表的時候需要聲明一個va_list類型的變量配合這三個宏使用。 va_start(va_list變量名,省略號前面最後一個有名字的參數):在提取可變參數前必須調用這個宏實現初始化。 va_arg(va_list變量名, type_of_var):用於提取變量,type_of_var是提取的變量的類型。返回對應類型的參數。 va_end(va_list變量名):在參數處理完畢之後,必須調用va_end做一些清理。 下面的例子摘自c和指針  
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
#include<string.h>
float average(int n_value,...)  //求指定數量值的平均值
{
 va_list var_arg;      //聲明va_list變量
 int count = 0;
 float sum = 0;
 va_start(var_arg, n_value);  //准備訪問可變參數
 {
  for (count = 0; count < n_value; count++)
  {
   sum += va_arg(var_arg, int);
  }
  va_end(var_arg);   //完成可變參數的處理
  return sum / n_value;
 }
}
int main()
{

 printf("%lf\n", average(6,1,2,3,4,5,6));
 system("pause");
 return 0;
}

 

  上面的例子是實現求指定數量值的平均值的可變參數列表實現辦法。 當然可變參數的應用還有很多比如實現字符串的拷貝
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
#include<string.h>
void nstrcpy(char *dest, ...)
{
 va_list     pi;   //聲明va_list變量
 char        *p;
 va_start(pi, dest);
 while ((p = va_arg(pi, char *)) != NULL)   //通過va_arg(pi,char *)來提取參數列表中的變量  
 {
  strcpy(dest, p);
  dest += strlen(p);        //復制完成一個變量進行下一個的復制
 }
 va_end(pi);
}
int main()
{
 char a[100];
 char *b = "asdg";
 char *c = "qwewq";
 char *d = "aswq";
 nstrcpy(a, b, c, d);
 printf("%s\n", a);
 system("pause");
 return 0;
}

 

完成多個字符串的拷貝。 對可變參數列表的簡單理解,對於三個宏具體的定義還不是很明白,等徹底搞清楚了再來完善關於可變參數列表的博客。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved