[CμΈμ΄] call-by-value VS call-by-reference
π 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);
}