ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ ์ธ์์ ๋ฌ์ ๊ธฐ๋ณธ๋ฐฉ์์ ๊ฐ์ ๋ณต์ฌ์ด๋ค
๋งค๊ฐ๋ณ์ ์ ๋ฌ ๋ฐฉ๋ฒ์ 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;
}
'์ธ์ด > C' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C์ธ์ด] ํฌ์ธํฐ ์ฐ์ฐ _ ํฌ์ธํฐ ๋ณ์ ๊ฐ ์์ฒด ๋ณ๊ฒฝ (0) | 2023.08.01 |
---|---|
[C์ธ์ด] 1์ฐจ์ ๋ฐฐ์ด์ด๋ฆ์ ํฌ์ธํฐ ํ๊ณผ 2์ฐจ์ ๋ฐฐ์ด์ด๋ฆ์ ํฌ์ธํฐ ํ (0) | 2023.03.08 |
[C์ธ์ด] ํฌ์ธํฐ์ ํฌ์ธํฐ (0) | 2023.03.02 |
[C์ธ์ด] ๋ค์ฐจ์ ๋ฐฐ์ด (0) | 2023.02.19 |
[C์ธ์ด] call-by-value VS call-by-reference (0) | 2023.02.17 |