C++에서 참조로 포인터 전달
이 기사에서는 C++에서 참조로 포인터를 전달하는 방법에 대한 여러 방법을 보여줍니다.
&var
표기법을 사용하여 참조로 객체 전달
일반적으로 참조는 C++에서 개체의 별칭을 정의하며 선언 중에 초기화되어야합니다. 초기화 된 참조는 지정된 개체에 바인딩 된 상태로 유지되며 다른 개체에 다시 바인딩 될 수 없습니다. 참조에 대한 작업은 바인딩 된 개체 자체를 수정합니다. 따라서 매개 변수를 함수에 전달하는 일반적인 방법입니다. 참조를 사용하면 호출 수신자 함수 범위에 대한 객체의 암시 적 복사를 방지 할 수 있으므로 참조가 선호되는 방법입니다. 다음 예제는 주어진 값에 대한 요소를 검색하는 함수에 대한const
참조를 통해std::vector
객체를 전달하는 방법을 보여줍니다.
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::string;
using std::vector;
void findInteger(const vector<int> &arr, int k) {
for (auto &i : arr) {
if (i == k) {
cout << "found - " << k << " in the array" << endl;
return;
}
}
cout << "couldn't find - " << k << " in the array" << endl;
}
int main() {
vector<int> vec = {11, 21, 121, 314, 422, 4, 242};
findInteger(vec, rand() % 100);
return EXIT_SUCCESS;
}
출력:
couldn t find - 83 in the array
*&var
표기법을 사용하여 참조로 객체에 포인터 전달
반면에*&var
표기법을 사용하여 함수에 대한 참조로 포인터를 전달할 수 있습니다. 포인터는 객체 자체입니다. 함수 매개 변수로 포인터에 대한 참조를 전달하도록 지정하거나 복사 할 수 있습니다. 이 경우&
기호는 참조 표기이며 메모리에서 객체의 위치에 대한 포인터를 검색하는 데 사용되는 연산자의 주소가 아닙니다. 전달 된 객체의 값은 표준 포인터 역 참조 연산자 인*
를 사용하여 액세스해야합니다. 아래 샘플 코드는 주어진 문자열 객체의 ASCII 값을cout
스트림에 인쇄합니다.
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::string;
using std::vector;
void printASCII(string *&str) {
for (auto &i : *str) {
cout << (int)i << ", ";
}
cout << endl;
}
int main() {
auto str = new string("Arbitrary string");
printASCII(str);
return EXIT_SUCCESS;
}
출력:
65, 114, 98, 105, 116, 114, 97, 114, 121, 32, 115, 116, 114, 105, 110, 103,
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