인수
이 형식은 함수 호출에서 인수를 같습니다.
expression ( expression-list <SUB>opt</SUB> ) /* Function call */
함수 호출에서 식 목록 (쉼표로 구분) 식의 목록입니다.두 번째 표현식의 값을 함수에 전달 된 인수입니다.함수 인수가 없으면 식 목록 키워드를 포함 해야 합니다 void.
인수에는 기본 값, 구조체, 공용 구조체 또는 포인터 형식이 될 수 있습니다.모든 인수는 값으로 전달 됩니다.즉, 인수의 복사본을 해당 매개 변수에 할당 됩니다.함수가 인수를 전달 하는 실제 메모리 위치를 알지 못합니다.함수의 원래 파생 된 변수에 영향을 주지 않고이 복사본을 사용 합니다.
배열 또는 함수 인수로 서 전달할 수 있지만 이러한 항목에 포인터를 전달할 수 있습니다.포인터 함수 참조로 값에 액세스 하는 방법을 제공 합니다.함수 포인터를 변수에 변수의 주소를 보유 하 고 있기 때문이 주소 변수 값에 액세스할 수 있습니다.배열 및 함수에 인수로 전달할 수 없습니다 경우에 포인터 인수 함수를 배열 및 함수에 액세스할 수 있습니다.
인수 계산 순서 여러 컴파일러 다른 최적화 수준에서 달라질 수 있습니다.그러나 함수를 입력 하기 전에, 인수 및 파생 작업이 완벽 하 게 계산 됩니다.참조 하십시오 부작용 부작용에 대해서.
해당 식 목록 호출 함수를 평가 하 고 각 인수에 대 한 함수 호출에는 일반적인 산술 변환이 수행 됩니다.프로토타입을 사용할 수 있으면 결과 인수의 형식이 프로토타입의 해당 매개 변수를 비교 합니다.일치 하지 않는 경우에 변환을 수행 하는, 또는 진단 메시지 발급 됩니다.매개 변수는 또한 일반적인 산술 변환이 거쳐야.
식의 수 식 목록 함수 프로토타입 또는 정의 다양 한 수의 인수를 명시적으로 지정 하지 않는 경우, 매개 변수 개수와 일치 해야 합니다.이 경우 컴파일러는 인수 많이 매개 변수 목록에서 형식 이름으로 확인 하며, 필요한 경우 위에서 설명한 대로 변환.참조 하십시오 호출의 변수 숫자 인수가 에 대 한 자세한 내용은.
프로토타입의 매개 변수 목록 키워드만 포함 하는 경우 void, 제로 정의에 매개 변수 및 함수 호출에 인수는 컴파일러에 필요 합니다.진단 메시지는 인수가 발견 되 면 발생 합니다.
예제
이 포인터 인수를 사용합니다.
int main()
{
/* Function prototype */
void swap( int *num1, int *num2 );
int x, y;
.
.
.
swap( &x, &y ); /* Function call */
}
/* Function definition */
void swap( int *num1, int *num2 )
{
int t;
t = *num1;
*num1 = *num2;
*num2 = t;
}
이 예는 swap 함수에 선언 main 를 각각 식별자에 의해 표현 되는 두 개의 인수를 num1 및 num2, 둘 다에 대 한 포인터입니다 int 값입니다.매개 변수 num1 및 num2 를 프로토타입 스타일 정의 선언에 대 한 포인터와 int 값을 입력 합니다.
함수 호출에서
swap( &x, &y )
주소를 x 에 저장 됩니다 num1 는 y 에 저장 됩니다 num2.이제 두 개의 이름 또는 "별칭" 동일한 위치에 존재합니다.References to *num1 and *num2 in swap are effectively references to x and y in main.내의 할당 swap 의 내용 실제로 교환 x 및 y.따라서 아니오 return 문이 필요 합니다.
컴파일러에서는 인수를 형식 검사를 수행 swap 때문에 프로토타입의 swap 각 매개 변수에 대해 인수 형식이 포함 되어 있습니다.식별자는 프로토타입 및 정의의 괄호 안에 동일한 수 있습니다 또는 다른 합니다.중요 한 점은 인수 형식의 프로토타입 및 정의 매개 변수 목록과 일치입니다.