>백엔드 개발 >C++ >C 함수에 매개변수를 전달할 때 원래 변수를 어떻게 수정합니까?

C 함수에 매개변수를 전달할 때 원래 변수를 어떻게 수정합니까?

DDD
DDD원래의
2024-12-27 04:28:28341검색

How Do I Modify Original Variables When Passing Parameters to a C   Function?

참조와 함수의 값으로 매개변수 전달

다음 코드 조각을 고려하세요.

void trans(double x, double y, double theta, double m, double n)
{
    m = cos(theta) * x + sin(theta) * y;
    n = -sin(theta) * x + cos(theta) * y;
}

If 이 함수를 다음과 같이 호출합니다.

trans(center_x, center_y, angle, xc, yc);

xc와 yc의 값을 변경하면 실망하게 될 것입니다. 이는 매개변수가 기본적으로 C에서 값으로 전달되기 때문입니다. 즉, 함수 내부의 매개변수에 대한 변경 사항이 전달된 원래 변수에 반영되지 않습니다.

이 문제를 극복하려면 다음 중 하나를 전달하면 됩니다. 참조로 매개변수를 사용하거나 포인터 연산을 사용합니다.

참조 사용

C에서는 참조를 사용할 수 있습니다. 매개변수를 참조로 전달합니다. 이를 통해 전달된 원래 변수를 수정할 수 있습니다. 참조를 사용하도록 trans 함수를 수정하는 방법은 다음과 같습니다.

void trans(double x, double y, double theta, double& m, double& n)
{
    m = cos(theta) * x + sin(theta) * y;
    n = -sin(theta) * x + cos(theta) * y;
}

매개변수 유형은 이제 double(예: double&)에 대한 참조입니다.

그런 다음 다음과 같이 함수를 호출할 수 있습니다.

trans(center_x, center_y, angle, xc, yc);

이제 xc 및 값이 올바르게 수정됩니다. yc.

포인터 연산 사용

C에서 참조로 매개변수를 전달하는 또 다른 방법은 포인터 연산을 사용하는 것입니다. 이는 C에서 더 일반적이지만 C에서도 사용할 수 있습니다. 포인터 연산을 사용하도록 trans 함수를 수정하는 방법은 다음과 같습니다.

void trans(double x, double y, double theta, double* m, double* n)
{
    *m = cos(theta) * x + sin(theta) * y;
    *n = -sin(theta) * x + cos(theta) * y;
}

매개변수 유형은 이제 double(예: double*)에 대한 포인터입니다.

그런 다음 함수는 다음과 같습니다:

trans(center_x, center_y, angle, &xc, &yc);

이것은 또한 xc 및 값을 올바르게 수정합니다. yc.

위 내용은 C 함수에 매개변수를 전달할 때 원래 변수를 어떻게 수정합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.