---
id: cpp-function-reference
title: "C++ Functions - Pass By Reference"
category: "Programming_Language"
status: "draft"
verification_status: "conceptual"
canonical_id: ""
aliases: ["pass by reference", "swap function", "C++ 참조로 전달"]
duplicate_of: ""
source_trust_level: "B"
confidence_score: 0.87
created_at: 2026-07-04
updated_at: 2026-07-04
review_reason: ""
merge_history: []
tags: ["cpp", "programming-language", "w3schools", "functions", "references"]
raw_sources: ["https://www.w3schools.com/cpp/cpp_function_reference.asp"]
applied_in: []
github_commit: ""
---

# [[CPP Functions - Pass By Reference]]

## 🎯 한 줄 통찰 (One-line insight)
Passing a parameter as `int &num` lets a function PERMANENTLY change the caller's actual variable using ordinary assignment syntax (`num = 50;`) with no `*` dereference needed anywhere — a much simpler syntax than C's equivalent (which requires passing `&myCar` and using `->` inside the function) — showing that C++'s reference feature does the SAME job as C's pointer-parameter pattern but eliminates every pointer-specific symbol from both the call site and the function body. [S1]

## 🧠 핵심 개념 (Core concepts)
- **`type &param`** — a reference parameter; the function receives an ALIAS to the caller's actual variable, not a copy. [S1]
- **No dereference syntax needed** — unlike a pointer parameter, using `num` directly (no `*num`) reads or writes the caller's original variable. [S1]
- **Swap pattern** — `void swapNums(int &x, int &y)` can swap the CALLER's two variables permanently, since both parameters are aliases to the originals. [S1]
- **Works for any type, including `string`** — `void modifyStr(string &str)` mutates the caller's original string. [S1]

## 📖 세부 내용 (Details)
- Changing a caller's variable through a reference parameter: `void changeValue(int &num) { num = 50; } int value = 10; changeValue(value); cout << value; // 50`. [S1]
- Swapping two caller variables: `void swapNums(int &x, int &y) { int z = x; x = y; y = z; } swapNums(firstNum, secondNum); // firstNum and secondNum are now swapped`. [S1]
- Mutating a string through a reference: `void modifyStr(string &str) { str += " World!"; } string greeting = "Hello"; modifyStr(greeting); cout << greeting; // "Hello World!"`. [S1]

## ⚖️ 모순 및 업데이트 (Contradictions & updates)
- **참조 전달은 포인터 전달보다 문법이 훨씬 간단함**: C에서는 &myCar로 넘기고 함수 안에서 ->로 접근해야 했지만, C++의 참조 매개변수는 & 없이 num처럼 직접 써서 원본 값을 바꿀 수 있다는 점에서 동일한 기능을 훨씬 단순한 문법으로 제공함이 확인됨. [S1]

## 🛠️ 적용 사례 (Applied in summary)
두 정수 변수의 값을 서로 맞바꾸는 swapNums() 함수가 참조 전달의 대표적인 실전 활용 사례로 원문에 직접 제시됨. [S1]

## 💻 코드 패턴 (Code patterns)
Swapping two of the caller's variables using reference parameters (C++):
```cpp
void swapNums(int &x, int &y) {
  int z = x;
  x = y;
  y = z;
}
int main() {
  int firstNum = 10;
  int secondNum = 20;
  swapNums(firstNum, secondNum); // both are permanently swapped
  return 0;
}
```

## ✅ 검증 상태 및 신뢰도
- **상태:** draft
- **검증 단계:** conceptual
- **출처 신뢰도:** B (W3Schools — widely used educational reference, not a primary standards body)
- **신뢰 점수:** 0.87
- **중복 검사 결과:** 신규 생성 (New discovery)

## 🔗 지식 그래프 (Knowledge Graph)
- **상위/루트:** [[C++ Tutorial]]
- **관련 개념:** [[CPP Function Array]], [[CPP Function Structures]], [[CPP References]]
- **참조 맥락:** 참조로 전달 — 구조체를 함수로 전달(Function Structures) 챕터로 이어짐.

## 📚 출처 (Sources)
- [S1] W3Schools — C++ Functions - Pass By Reference — https://www.w3schools.com/cpp/cpp_function_reference.asp

## 📝 변경 이력 (Change history)
- 2026-07-04: Initial draft synthesized from the W3Schools "C++ Functions - Pass By Reference" page (Astra wiki-curation, P-Reinforce v3.1 format).
