C++에서 참조와 포인터로 인수 전달
-
&variable
표기법을 사용하여 C++에서 참조로 함수 인수 전달 -
*variable
표기법을 사용하여 C++에서 참조로 함수 인수 전달 -
(&array_variable)[x][y]
표기법을 사용하여 C++에서 참조로 2D 배열 전달
이 기사에서는 참조로 인수를 전달하는 방법과 C++에서 포인터로 전달하는 방법에 대해 설명합니다.
&variable
표기법을 사용하여 C++에서 참조로 함수 인수 전달
인수 전달은 서로 다른 코드 블록 간의 데이터 교환을위한 유연한 인터페이스를 제공하는 함수의 가장 일반적인 기능입니다. 함수가 호출 될 때마다 전달 된 인수에 의해 매개 변수가 생성되고 초기화됩니다. 일반적으로 인수 전달을 위해 두 가지 방법이 구별됩니다. 값으로 전달되고 참조로 전달되며, 후자는 매개 변수가 해당 인수의 별칭이되도록합니다. 다음 예에서는 인수가 참조로 전달되고int &var
표기법이 사용되는 기본 정수 스왑 함수를 보여줍니다. swapIntegers
함수가 반환되면main
함수 범위의int
개체가 수정됩니다.
#include <iostream>
using std::cout;
using std::endl;
void swapIntegers(int& x, int& y) {
int z = x;
x = y;
y = z;
}
int main() {
int a = 45, b = 35;
cout << "a = " << a << " b = " << b << "\n";
cout << "Swapping a and b ...\n";
swapIntegers(a, b);
cout << "a = " << a << " b = " << b << "\n";
return EXIT_SUCCESS;
}
출력:
a = 45 b = 35
Swapping a and b ...
a = 35 b = 45
*variable
표기법을 사용하여 C++에서 참조로 함수 인수 전달
포인터를 사용하여 이전 예제와 유사한 동작을 구현할 수 있습니다. 포인터는 개체의 주소이며*
연산자로 역 참조하여 개체 값에 액세스 할 수 있습니다. 포인터를 사용하여 인수를 전달한다는 것은 함수 범위에서 주어진 객체에 액세스하고 값을 수정하여 반환 후에도 상태가 유지되도록 할 수 있음을 의미합니다. 함수에 대한 포인터를 전달하려면 주소 (&
) 연산자를 사용하여 액세스해야합니다.
#include <iomanip>
#include <iostream>
using std::cout;
using std::endl;
using std::setw;
void swapIntegers2(int* x, int* y) {
int z = *x;
*x = *y;
*y = z;
}
int main() {
int a = 45, b = 35;
cout << "a = " << a << " b = " << b << "\n";
cout << "Swapping a and b ...\n";
swapIntegers2(&a, &b);
cout << "a = " << a << " b = " << b << "\n";
return EXIT_SUCCESS;
}
출력:
a = 45 b = 35
Swapping a and b ...
a = 35 b = 45
(&array_variable)[x][y]
표기법을 사용하여 C++에서 참조로 2D 배열 전달
때로는 2 차원 C 스타일 배열 참조를 함수에 전달하는 것이 편리 할 수 있지만 표기법은 약간 직관적이지 않으며 잘못된 결과를 초래할 수 있습니다. 임의의SIZE
차원을 가진 정수 배열이있는 경우 함수 매개 변수에서int (&arr)[SIZE][SIZE]
표기법을 사용하여 참조 할 수 있습니다. 괄호()
가 누락되면int
개체에 대한 참조 배열로 해석되어 컴파일 오류가 발생합니다.
#include <iomanip>
#include <iostream>
using std::cout;
using std::endl;
using std::setw;
void MultiplyArrayByTwoV2(int (&arr)[SIZE][SIZE]) {
for (auto& i : arr) {
for (int& j : i) j *= 2;
}
}
void printArray(int (&arr)[SIZE][SIZE]) {
for (auto& i : arr) {
cout << " [ ";
for (int j : i) {
cout << setw(2) << j << ", ";
}
cout << "]" << endl;
}
}
constexpr int SIZE = 4;
int main() {
int array_2d[SIZE][SIZE] = {
{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
MultiplyArrayByTwoV2(array_2d);
printArray(array_2d);
return EXIT_SUCCESS;
}
출력:
[ 2, 4, 6, 8, ]
[ 10, 12, 14, 16, ]
[ 18, 20, 22, 24, ]
[ 26, 28, 30, 32, ]
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook