C언어 핵심! Call by Value/Reference 10분 마스터 (소스코드 제공)
게시일:
작성자: 자청의 유튜브 추출기
C 언어 기초 다지기: 변수, 함수, 그리고 포인터까지!
1. #include <stdio.h>: 라이브러리 불러오기
#include <stdio.h>는 컴퓨터한테 "야, 나 기본적인 입력이랑 출력하는 거 좀 쓸래!" 하고 알려주는 거야.stdio는standard input output의 줄임말이고,h는header파일이라는 뜻이지.- 이걸 불러와야
printf(화면에 글씨 보여주기)랑scanf(키보드로 입력받기) 같은 함수를 쓸 수 있어.
2. main 함수: C 언어의 시작점
- 모든 C 언어 프로그램은
main함수에서 시작해. int main() { ... }이렇게 생겼는데,int는 이 함수가 끝나고 숫자(정수)를 돌려줄 거라는 뜻이야.
3. 변수: 데이터를 담는 상자
int num;이렇게 쓰면,num이라는 이름의 상자를 하나 만드는 거야. 이 상자에는 정수(10진수 숫자)를 담을 수 있어.- 이 상자는 컴퓨터 메모리 어딘가에 만들어지고, 그 위치를 주소라고 해.
&num이라고 쓰면num상자의 주소를 알 수 있어. 이걸 10진수로 보여주려면%d를 써서printf("%d", &num);이렇게 하면 돼.num = 10;이라고 쓰면,num상자에 숫자10을 넣어주는 거야. C 언어에서=는 '같다'가 아니라 '오른쪽 값을 왼쪽 상자에 넣어줘!'라는 뜻이야. 이걸 대입 연산자라고 해.- 만약
a = 10 + 4 * 2;이렇게 쓰면, 컴퓨터는 곱하기(*)를 먼저 계산해서4 * 2 = 8을 구하고, 그다음 더하기(+)를 해서10 + 8 = 18을 구한 다음, 마지막으로=를 만나서a상자에18을 넣어줘.=는 항상 제일 마지막에 계산돼.
4. 함수 호출: 다른 함수를 사용하는 방법
callByValue(num);처럼 함수 이름을 쓰고 괄호 안에 값을 넣어주면, 그 함수를 실행하라는 뜻이야. 이걸 함수 호출이라고 해.callByValue함수 안에서num이라는 변수를 사용하면, 이건main함수에 있는num이랑은 다른, 새로운num이야. 이름은 같지만 완전히 다른 상자라고 생각하면 돼.- 그래서
callByValue안에서num의 값을 바꿔도,main함수에 있는num의 값은 그대로 유지돼. 이걸 값에 의한 호출 (Call by Value)이라고 해. 마치 복사본을 넘겨주는 것과 같지.
5. 포인터: 주소를 담는 특별한 변수
int *ptr;처럼*를 붙여서 변수를 만들면, 이건 포인터 변수가 돼. 포인터 변수는 다른 변수의 주소를 담는 상자야.ptr = #이라고 쓰면,num의 주소를ptr이라는 포인터 변수에 넣어주는 거야.printf("%d", ptr);라고 하면,ptr에 담긴 주소가 화면에 찍혀.printf("%d", *ptr);라고 하면,ptr이 가리키는 주소에 있는 값을 찍어줘. 이걸 역참조라고 해. 마치 포인터가 가리키는 곳으로 가서 값을 가져오는 거지.*ptr = 100;이라고 하면,ptr이 가리키는 주소에 있는 값(원래num의 값)을100으로 바꿔주는 거야.
6. 주소에 의한 호출 (Call by Reference): 값을 직접 바꾸기
callByReference(&num);처럼 함수를 호출할 때&를 붙여서 주소를 넘겨주면, 함수 안에서 그 주소를 이용해서 원래 변수의 값을 직접 바꿀 수 있어.- 함수 안에서는 이 주소를 받기 위해 포인터 변수를 사용해야 해.
callByReference함수 안에서*ptr = 100;처럼 포인터를 사용해서 값을 바꾸면,main함수에 있는num의 값도 함께 바뀌게 돼. 마치 직접 가서 값을 고치는 것과 같지.
7. 상수 (Constant): 변하지 않는 값
const double PI = 3.14159;처럼const를 붙이면, 이 변수는 프로그램이 실행되는 동안 절대 바뀌지 않는 상수가 돼.PI라고만 써도3.14159라는 값이 자동으로 들어가고, 이걸 다른 값으로 바꾸려고 하면 오류가 나.
핵심 정리:
#include <stdio.h>는printf,scanf같은 함수를 쓰기 위해 필요해.main함수에서 프로그램이 시작돼.- 변수는 데이터를 담는 상자이고,
&를 붙이면 주소를 알 수 있어. =는 값을 넣어주는 대입 연산자야.- 함수 호출 시 값을 넘겨주면 (Call by Value), 함수 안에서 값을 바꿔도 원래 값은 그대로야.
- 함수 호출 시 주소를 넘겨주면 (Call by Reference), 함수 안에서 포인터를 이용해 원래 값을 바꿀 수 있어.
const를 붙이면 변하지 않는 상수가 돼.