C++에서 참조로 포인터 전달

Jinku Hu 2023년10월12일
  1. &var표기법을 사용하여 참조로 객체 전달
  2. *&var표기법을 사용하여 참조로 객체에 포인터 전달
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,
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

관련 문장 - C++ Pointer