検索
  • サインイン
  • サインアップ
パスワードのリセットが成功しました

興味のあるプロジェクトをフォローし、それらに関する最新ニュースをチェックしてください

C変数パラメータ

コレクション 205
リーディング 91673
更新時間 2016-09-11

場合によっては、関数が事前に定義された数ではなく可変数のパラメーターを受け取りたいという状況に遭遇することがあります。 C 言語は、特定のニーズに応じて可変数の引数を受け入れる関数を定義できるようにすることで、この状況に対する解決策を提供します。次の例は、そのような関数の定義を示しています。

int func(int, ... ) {   .   .   .}int main(){
   func(1, 2, 3);
   func(1, 2, 3, 4);}

関数 func() の最後のパラメーターは省略記号、つまり 3 つのドット (...) として記述されることに注意してください。省略記号の前のパラメーターは常に int であり、これは を表します。渡される変数パラメータの合計。この機能を使用するには、可変長引数機能を実装する関数とマクロを提供する stdarg.h ヘッダー ファイルを使用する必要があります。具体的な手順は次のとおりです:

  • 関数を定義します。最後のパラメータは省略記号で、省略記号の前のパラメータは常にintで、パラメータの数を示します。

  • 関数定義内に va_list 型変数を作成します。この型は stdarg.h ヘッダー ファイルで定義されます。

  • intパラメータとva_startマクロを使用して、va_list変数をパラメータリストに初期化します。マクロ va_start は、stdarg.h ヘッダー ファイルで定義されます。

  • 引数リストの各項目にアクセスするには、va_argマクロとva_list変数を使用します。

  • マクロva_endを使用して、va_list変数に割り当てられたメモリをクリーンアップします。

次に、上記の手順に従って、可変数の引数を受け取り、その平均値を返す関数を作成しましょう:

#include <stdio.h>#include <stdarg.h>double average(int num,...){

    va_list valist;    double sum = 0.0;    int i;    /* 为 num 个参数初始化 valist */
    va_start(valist, num);    /* 访问所有赋给 valist 的参数 */    for (i = 0; i < num; i++)    {
       sum += va_arg(valist, int);    }    /* 清理为 valist 保留的内存 */
    va_end(valist);    return sum/num;}int main(){
   printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5));
   printf("Average of 5, 10, 15 = %f\n", average(3, 5,10,15));}

上記のコードをコンパイルして実行すると、次の結果が生成されます。関数 average() が 2 回呼び出され、各回の最初のパラメータが渡される変数パラメータの合計数を表すことに注意してください。省略記号は、可変数の引数を渡すために使用されます。

りー
ホットAIツール
Undress AI Tool
Undress AI Tool

脱衣画像を無料で

AI Clothes Remover
AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undresser.AI Undress
Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

Stock Market GPT
Stock Market GPT

AIを活用した投資調査により賢明な意思決定を実現

人気のツール
メモ帳++7.3.1
メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版
SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6
ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版
SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)