c言語における可変パラメータリストの簡単な理解
1945 ワード
関数プロトタイプでは一般的にパラメータの数は固定されていますが、異なる場合に不定数のパラメータを受信したい場合はどうすればいいのでしょうか.c言語は可変パラメータリストを提供して実現する.
可変パラメータリストは、stdarg.hのヘッダファイルに定義されたマクロによって実現される.ヘッダファイルにva_が宣言されましたlistタイプとva_start、va_arg、va_end 3マクロ.可変パラメータリストを使用する場合はva_を宣言する必要があります.Listタイプの変数は、この3つのマクロと組み合わせて使用されます.
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#include#include#include
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", a); system("pause"); return 0;}
複数の文字列のコピーを完了します.
可変パラメータリストの簡単な理解は,3つのマクロの具体的な定義についてはまだよく分からないが,徹底的に明らかになってから可変パラメータリストに関するブログを改善する.
可変パラメータリストは、stdarg.hのヘッダファイルに定義されたマクロによって実現される.ヘッダファイルにva_が宣言されましたlistタイプとva_start、va_arg、va_end 3マクロ.可変パラメータリストを使用する場合はva_を宣言する必要があります.Listタイプの変数は、この3つのマクロと組み合わせて使用されます.
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
", average(6,1,2,3,4,5,6));
system("pause");
return 0;
}
上記の例は、指定された数量値の平均値を求める可変パラメータリストを実現する方法である.
もちろん、可変パラメータの応用には、文字列のコピーを実現するなど、多くのものがあります.
#define _CRT_SECURE_NO_WARNINGS
#include
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", a); system("pause"); return 0;}
複数の文字列のコピーを完了します.
可変パラメータリストの簡単な理解は,3つのマクロの具体的な定義についてはまだよく分からないが,徹底的に明らかになってから可変パラメータリストに関するブログを改善する.