C++ 공부 (6/21)

wsung·2026년 1월 21일

Day 6 — 함수(Function) + 메모리 사고의 시작

🎯 오늘 목표

  • 함수 = “코드 묶음”이 아니라 경계
  • 값 전달 vs 참조 전달 개념 완전 이해
  • 포인터 들어가기 전 메모리 흐름 감각 만들기
  • Day 7 포인터를 위한 발판 완성

함수의 기본 형태

반환타입 함수이름(매개변수)
{
return 값;
}

int add(int a, int b){
return a+b;
}

호출

int result = add(3,5);

함수에 값은 어떻게 전달할까?

void change(int x)
{
	x = 100;
}

int main()
{
	int a = 10;
    change(a);
    std::cout << a << std::endl;
}
=>10

참조

int& ref = a;
-> ref는 a의 별명

void change(int &x)
{
	x = 100;
}

int main()
{
	int a =10;
    change(a);
    std::cout << a << std::endl;
}
=> 100

메모리 개념(중요)

a ─────────┐
		  │
ref ───────┘  (같은 대상)
  • 복사 X
  • 별명 O
  • C++이 포인터를 숨겨서 제공하는 기능

참조의 특징

  1. 반드시 초기화 : int& r; X
  2. 다른 대상 기리키기 X
  3. null 없음
  4. 내부적으로는 포인터 기반

배열을 함수로 넘기면 무슨일??

void print(int arr[])
{
	arr[0] = 999;
}

int main()
{
	int a[3] = {1,2,3};
    print(a);
    std::cout << a[0];
}

=> 999

  • 배열은 항상 주소로 전달됨

중요한 사실

C++ 에서

  • 값전달 = 복사
  • 참조 전달 = 원본
  • 배열전달 = 사실상 포인터

===================================================
C++은 포인터가 없어진 언어가 아니라 포인터를 감싸서 숨겨둔 언어

  • C++에는 포인터가 있다
  • but 안써도 되게 해주는 기능이 많다.

C vs C++
c: 포인터가 주인공
C++ : 포인터는 핵심, 직접 안써도 되게 설계

void print(int arr[])

  • 배열같지만??? 컴파일러 입장에서는
    void print(int* arr)
  • 배열 전달 = 포인터전달
  • 주소 넘김

참조는 뭐냐??

int& ref = a;
-> 포인터를 인간 친화적으로 포장한 것

내부적으론??
int* p = &a; 이랑 동급

profile
0부터 시작하는 백엔드

0개의 댓글