Latest web development tutorials

C 변수 매개 변수

때때로 당신은 이러한 상황이 발생할 수 있습니다, 당신은 인수의 변수 숫자가 아닌 인수 미리 정의 된 번호로 역할을 할 수 있습니다. 이 시나리오의 C 언어는 특정 필요에 따라 매개 변수의 변수 번호를 수용 할 수있는 함수를 정의 할 수있는 솔루션을 제공합니다. 다음의 예는 이러한 함수의 정의를 보여준다.

int func(int, ... ) 
{
   .
   .
   .
}

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

함수FUNC ()가 최종 작성 인수 세 개의 점 (...),줄임표 그 전에 인수가 전달 될 변수 매개 변수의 총 수를나타내는,항상INT는것을 줄임표 있습니다. 이 기능을 사용하려면 함수 및 매크로를 달성하기 위해 변수 매개 변수의 기능을제공와 stdarg.h 헤더 파일을 사용해야합니다.다음과 같이 구체적인 단계는 다음과 같습니다

  • 함수의 정의는, 마지막 파라미터는항상 INT이다 파라미터 앞의 생략, 줄임표 인 파라미터의 수를 나타낸다.
  • 함수정의에서의 va_list 형의 변수를 만들고,이 유형은 헤더 파일와 stdarg.h에 정의되어 있습니다.
  • 지능 매개 변수 사용 매크로 매개 변수 목록으로의 va_list변수를 초기화하는va_start를.와 stdarg.h va_start를 매크로는 헤더 파일에 정의되어 있습니다.
  • 각 항목에 대한 매개 변수 목록에 액세스 할 수va_arg를 매크로와의va_list 변수를 사용합니다.
  • 부여의 va_list 변수 메모리를 va_end의청소 매크로를 사용합니다.

우리가 지금 가변 인자로 함수를 작성하려면 위의 단계를 수행하고 평균을 반환하자 :

#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 of 2, 3, 4, 5 = 3.500000
Average of 5, 10, 15 = 10.000000