ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๐Ÿ’• call-by-value VS call-by-reference

 

ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋‹จ์ˆœํžˆ ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ํ˜•ํƒœ์˜ ํ•จ์ˆ˜ํ˜ธ์ถœ์„ ๊ฐ€๋ฆฌ์ผœ Call-by-value๋ผ ํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ์˜ ์ ‘๊ทผ์— ์‚ฌ์šฉ๋˜๋Š” ์ฃผ์†Œ ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ํ˜•ํƒœ์˜ ํ•จ์ˆ˜ํ˜ธ์ถœ์„ call-by-reference๋ผ ํ•œ๋‹ค. 

 


[ call-by-value VS call-by-reference]

 

๐Ÿ™Œ ์˜ˆ์ œ 1)

๋ณ€์ˆ˜ num์— ์ €์žฅ๋œ ๊ฐ’์˜ ์ œ๊ณฑ์„ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ , ์ด๋ฅผ ํ˜ธ์ถœํ•˜๋Š” main ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž. ๋‹จ, ์—ฌ๊ธฐ์„œ๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€์˜ ํ˜•ํƒœ๋กœ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค.

  • call-by-value ๊ธฐ๋ฐ˜์˜ SquareByValue ํ•จ์ˆ˜
  • call-by-reference ๊ธฐ๋ฐ˜์˜ SquareByReference ํ•จ์ˆ˜ 

SquareByValue ํ•จ์ˆ˜๋Š” ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ๊ฐ’์˜ ์ œ๊ณฑ์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋ฉฐ, SquareByReference ํ•จ์ˆ˜๋Š” ์ •์ˆ˜๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ ๊ฐ’์„ ์ธ์ž๋กœ ๋ฐ›์•„์„œ ํ•ด๋‹น ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’์˜ ์ œ๊ณฑ์„ ๊ทธ ๋ณ€์ˆ˜์— ๋‹ค์‹œ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค. 

 

 

๐Ÿคฆ‍โ™€๏ธ ์ƒ๊ฐ ๊ณผ์ •

1. SquarByValue ํ•จ์ˆ˜๋Š” ๊ทธ๋ƒฅ ๋ฐ›๋Š” ๊ฐ’์„ num * num ์„ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“ค๋ฉด ๋  ๊ฒƒ ๊ฐ™๊ณ  Reference๋Š” ์ฃผ์†Œ๊ฐ’์„ ํ™œ์šฉํ•˜์—ฌ ๋งŒ๋“ค์ž. ๋‹จ, ๊ณ„์‚ฐ์‹œ์— ์ฃผ์†Œ๊ฐ’์„ ๊ณฑํ•˜๋Š”๊ฒƒ์ด ์•„๋‹Œ ๋ณ€์ˆ˜์— ์ฃผ์†Œ๊ฐ’์„ ๋„ฃ์–ด ๋ณ€์ˆ˜๋ผ๋ฆฌ์˜ ๊ณฑ์„ ๋งŒ๋“ค์ž

 

๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๋‹ต

 

#include <stdio.h>

int SquareByValue(int num)
{
	return num * num;
}

void SquareByReference(int *ptr)
{
	int num = *ptr;
	*ptr = num * num;
}
int main()
{
	int num = 10;
	printf("%d \n", SquareByValue(num));
	SquareByReference(&num);
	printf("%d \n", num);
	return 0;
}

 

 


 

 

 

๐Ÿ™Œ ์˜ˆ์ œ 2)

์„ธ ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’์„ ์„œ๋กœ ๋’ค๋ฐ”๊พธ๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด๋ณด์ž. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ํ•จ์ˆ˜์˜ ์ด๋ฆ„์ด Swap3๋ผ ํ•˜๋ฉด, ๋‹ค์Œ์˜ ํ˜•ํƒœ๋กœ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์–ด์•ผ ํ•œ๋‹ค.

  • Swap3(&num1,&num2,&num3);

๊ทธ๋ฆฌ๊ณ  ํ•จ์ˆ˜ํ˜ธ์ถœ์˜ ๊ฒฐ๊ณผ๋กœ num1์— ์ €์žฅ๋œ ๊ฐ’์€ num2์—, num2์— ์ €์žฅ๋œ ๊ฐ’์€ num3์—, ๊ทธ๋ฆฌ๊ณ  num3์— ์ €์žฅ๋œ ๊ฐ’์€ num1์— ์ €์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

๐Ÿคฆ‍โ™€๏ธ ์ƒ๊ฐ ๊ณผ์ •

1. ์ €์žฅ๋œ ๊ฐ’์„ ๋ฐ”๊ฟ”์•ผ ํ•˜๋‹ˆ ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜ temp๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ˆ˜๋ฅผ ๋Œ€์ž…ํ•ด์ค€๋‹ค. 

2. ๋‹จ์ˆœ ๊ฐ’ ๋ณ€๊ฒฝ์ด ์•„๋‹Œ ์ฃผ์†Œ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ์†Œ๊ฐ’์— ์ ‘๊ทผํ•œ๋‹ค. ์ฆ‰, ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์„๋•Œ์—๋„ ํฌ์ธํ„ฐ ์ฃผ์†Œ๊ฐ’์„ ๋ฐ›๋Š”๋‹ค. 

 

๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๋‹ต

#include <stdio.h>

int Swap3(int* ptr1, int* ptr2, int* ptr3)
{
	int temp = *ptr1;
	*ptr1 = *ptr2;
	*ptr2 = *ptr3;
	*ptr3 = temp;
}
int main()
{
	int num1 = 10, num2 = 20, num3 = 30;
	Swap3(&num1, &num2, &num3);
	printf("%d %d %d", num1, num2, num3);

}
๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG
more
ยซ   2025/07   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ