μ–Έμ–΄/C

[Cμ–Έμ–΄] ν•¨μˆ˜μ˜ 인자둜 λ°°μ—΄ μ „λ‹¬ν•˜κΈ°

SOo • 2023. 3. 6. 19:44

πŸ“Œ μΈμžμ „λ‹¬μ˜ 기본방식은 κ°’μ˜ 볡사이닀 

 

λ§€κ°œλ³€μˆ˜ 전달 방법은 1) 값에 μ˜ν•œ 전달 (Call by value) 와 2) 참쑰에 μ˜ν•œ 전달 (Call by reference)둜 λ‚˜λ‰œλ‹€.

값에 μ˜ν•œ 전달은 ν˜ΈμΆœν•œ ν•¨μˆ˜μ—μ„œ μž”λ‹¬ν•œ 인자의 값을 λ³΅μ‚¬ν•˜μ—¬ ν˜ΈμΆœλ°›μ€ ν•¨μˆ˜μ˜ μž…λ ₯ 맀개 λ³€μˆ˜μ˜ μ΄ˆκΈ°κ°’μ„ μ„€μ •ν•˜λŠ” 방식이닀. 즉, ν˜ΈμΆœν•œ 곳의 μΈμžμ™€ ν”Όν˜ΈμΆœν•œ 곳의 인자의 값은 κ°™μ§€λ§Œ λ©”λͺ¨λ¦¬λŠ” 독립적이닀.

 

반면 참쑰에 μ˜ν•œ 전달은 ν˜ΈμΆœν•œ ν•¨μˆ˜μ—μ„œ μ „λ‹¬ν•œ 인자λ₯Ό ν”Όν˜ΈμΆœ ν•¨μˆ˜μ˜ μž…λ ₯ 맀개 λ³€μˆ˜κ°€ μ°Έμ‘°ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 방식이닀. 즉, ν˜ΈμΆœν•œ 곳의 μΈμžμ™€ ν”Όν˜ΈμΆœν•œ 곳의 μΈμžλŠ” 같은 κ°œμ²΄μ΄λ‹€. 

 

Cμ–Έμ–΄μ—μ„œ 맀개 λ³€μˆ˜λ₯Ό μ „λ‹¬ν•˜λŠ” 방식은 값에 μ˜ν•œ 전달 (call by value)λ₯Ό μ‚¬μš©ν•œλ‹€.

포인터 λ³€μˆ˜μ²˜λŸΌ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 값을 κ°–λŠ” 데이터λ₯Ό 인자둜 μ „λ‹¬ν•˜λŠ” 것을 μ£Όμ†Œμ— μ˜ν•œ 호좜(call by memory)라고 λΆ€λ₯Έλ‹€. ν•˜μ§€λ§Œ κ²°κ΅­ μ£Όμ†Œμ— μ˜ν•œ ν˜ΈμΆœλ„ 포인터 λ³€μˆ˜κ°€ κ°–κ³  μžˆλŠ” 값이 λ©”λͺ¨λ¦¬ μ£Όμ†ŒμΈ κ²ƒμ΄λ―€λ‘œ 이 λ˜ν•œ 값에 μ˜ν•œ 호좜 방식이닀. 

 

배열을 ν†΅μ§Έλ‘œ λ„˜κ²¨λ°›μœΌλ €λ©΄ λ§€κ°œλ³€μˆ˜λ‘œ 배열을 μ„ μ–Έν•  수 μžˆμ–΄μ•Ό ν•˜λ‚˜, ν—ˆμš©λ˜μ§€ μ•ŠλŠ”λ‹€. λ”°λΌμ„œ 배열을 λ„˜κ²¨λ°›κΈ° μœ„ν•΄μ„œλŠ” λ°°μ—΄μ˜ μ£Όμ†Œκ°’μ„ μ „λ‹¬ν•΄μ•Όν•œλ‹€. 

 

ν•¨μˆ˜ λ‚΄μ—μ„œ 외뢀에 μ„ μ–Έλœ 배열에 μ ‘κ·Όν•˜μ—¬ 값을 좜λ ₯ν•˜λŠ” μ˜ˆμ‹œ

#include <stdio.h>

void ShowArayElem(int *param,int len) // 배열에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄ μ£Όμ†Œκ°’ λ§€κ°œλ³€μˆ˜λ‘œ ! λ°°μ—΄μ˜ 길이정보도 λ°›κΈ°
{
	int i;
	for (i = 0; i < len; i++)
	{
		printf("%d ", param[i]); // int ν˜• 포인터 λ³€μˆ˜μ˜ 이름을 λŒ€μƒμœΌλ‘œ λ°°μ—΄ν˜•νƒœμ˜ μ ‘κ·Ό μ§„ν–‰
	}
	printf("\n");
}


int main()
{
	int arr1[3] = { 1,2,3 }; 
	int arr2[5] = { 4,5,6,7,8 };
	ShowArayElem(arr1, sizeof(arr1) / sizeof(int));
	ShowArayElem(arr2, sizeof(arr2) / sizeof(int));
	return 0;

}

 

ν•¨μˆ˜ λ‚΄μ—μ„œ 외뢀에 μ„ μ–Έλœ 배열에 μ ‘κ·Όν•˜μ—¬ κ°’ λ³€κ²½

#include <stdio.h>

void ShowArayElem(int* param, int len) // λ°°μ—΄μ˜ μš”μ†Œλ₯Ό λ³΄μ—¬μ£ΌλŠ” ν•¨μˆ˜
{
	int i;
	for (i = 0; i < len; i++)
		printf("%d", param[i]);
	printf("\n");
}

void AddArayElem(int* param, int len, int add) // λ°°μ—΄μ˜ μš”μ†Œμ— 합을 ν•˜λŠ” ν•¨μˆ˜
{
	int i;
	for (i = 0; i < len; i++)
		param[i] = param[i] + add;
}
int main()
{
	int arr[3] = { 1,2,3 };

	AddArayElem(arr, sizeof(arr) / sizeof(int), 1);
	ShowArayElem(arr, sizeof(arr) / sizeof(int));

	AddArayElem(arr, sizeof(arr) / sizeof(int), 2);
	ShowArayElem(arr, sizeof(arr) / sizeof(int));

	
	AddArayElem(arr, sizeof(arr) / sizeof(int), 3);
	ShowArayElem(arr, sizeof(arr) / sizeof(int));
	return 0;
}