--- 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 ¶m`** — 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).