산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C++ 참조 호출: 포인터 활용 실전 예제

C++ 참조 호출: 포인터 활용 실전 예제

이 가이드에서는 명확한 코드 예제를 통해 C++에서 포인터를 사용해 인수를 참조로 전달하는 방법을 설명합니다. 값 교환 등을 다룹니다.

소개

C++ 함수의 세계에서 데이터를 전달하는 기본 방식은 값 전달입니다: 함수는 원본 데이터의 복사본을 받습니다. 이는 원본 변수를 보호하지만, 큰 객체에서는 비효율적이며 함수가 호출자의 데이터를 수정할 수 없게 만듭니다.

참조 전달은 이 두 문제를 해결합니다. 데이터를 복사하는 대신 함수는 원본 변수에 대한 참조(또는 주소)를 받아 직접 조작할 수 있게 합니다. 이는 C++ 참조나 원시 포인터 두 가지 동등한 방식으로 달성됩니다. 두 접근법을 모두 이해하면 유연성과 메모리 처리에 대한 깊은 통찰을 얻을 수 있습니다.

// 값을 받는 함수
void func1(int numVal) {
    // 코드
}

// 참조를 받는 함수 (C++ 참조 문법)
void func2(int &numRef) {
    // 코드
}

int main() {
    int num = 5;
    // 값 전달
    func1(num);
    // 참조 전달
    func2(num);
    return 0;
}

void func2(int &numRef)의 &는 매개변수가 참조임을 나타냅니다. func2가 호출되면 num의 값이 아닌 주소가 전달되어 함수가 num을 직접 수정할 수 있습니다.

C++ 참조 호출: 포인터 활용 실전 예제

예제 1: C++ 참조로 값 교환하기

#include <iostream>
using namespace std;

// 참조를 사용한 교환 함수
void swap(int &n1, int &n2) {
    int temp = n1;
    n1 = n2;
    n2 = temp;
}

int main() {
    int a = 1, b = 2;
    cout << "교환 전\n";
    cout << "a = " << a << "\n";
    cout << "b = " << b << "\n";
    swap(a, b);
    cout << "\n교환 후\n";
    cout << "a = " << a << "\n";
    cout << "b = " << b << "\n";
    return 0;
}

출력

교환 전
a = 1
b = 2
교환 후
a = 2
b = 1

이 예제에서 swap은 두 개의 참조를 받습니다. n1과 n2가 a와 b의 별칭이므로 함수 내부에서의 변경이 원본 변수에 영향을 줍니다.


예제 2: 포인터로 값 교환하기

#include <iostream>
using namespace std;

// 포인터를 사용한 함수 프로토타입
void swap(int*, int*);

int main() {
    int a = 1, b = 2;
    cout << "교환 전\n";
    cout << "a = " << a << "\n";
    cout << "b = " << b << "\n";
    // a와 b의 주소 전달
    swap(&a, &b);
    cout << "\n교환 후\n";
    cout << "a = " << a << "\n";
    cout << "b = " << b << "\n";
    return 0;
}

// 포인터를 사용한 교환 함수
void swap(int* n1, int* n2) {
    int temp = *n1;
    *n1 = *n2;
    *n2 = temp;
}

출력

교환 전
a = 1
b = 2
교환 후
a = 2
b = 1

여기서 swap은 원시 포인터를 받습니다. *로 역참조하여 제공된 주소의 값에 접근하고 수정합니다. 결과는 참조 버전과 동일하지만 포인터 문법은 주소 전달을 명시적으로 만듭니다.

참조와 포인터 중 선택은 문맥에 따라 다릅니다: 참조는 더 안전하고 깔끔한 문법을 제공하는 반면, 포인터는 메모리 주소에 대한 명시적 제어를 제공하며 동적 할당에 필요합니다.

C 언어

  1. C# using 문 마스터하기: 네임스페이스 임포트, 별칭, 정적 지시자
  2. C++ 연산자 마스터하기: 유형별 완벽 가이드와 실전 예제
  3. C++ 주석: 가독성 높고 유지보수하기 좋은 코드 작성법
  4. C++ 클래스 템플릿 마스터: 실전 가이드
  5. C 포인터 마스터하기: 실전 중심 전문가 가이드
  6. C++ 포인터 완전 정복: 개념, 예제, 실전 활용
  7. 2021년 주요 멀웨어 13가지: 위협, 사례, 예방법
  8. 데이터 센터 5대 모델 설명: 설계, 활용 사례, 사례
  9. 2021년 핵심 기술 트렌드 8가지와 실제 사례 탐구
  10. C 포인터 마스터: 기초부터 포인터 연산, 배열/함수 포인터, 동적 할당까지