
ν¨μλ₯Ό μ¬μ©ν λ λ§€κ°λ³μλ₯Ό μ΄λ»κ² μ¬μ©νλμ λ°λΌ μμ 2κ°μ§ λ°©λ² μ¬μ©ν μ μμ΅λλ€.
λ³μμ λ°μ΄ν°λ₯Ό 볡μ¬ν΄μ μ¬μ©νκ² λ©λλ€.
μ½λλ‘ μ΄ν΄λ³΄λ©΄
#include <stdio.h>
void swap(int a, int b){
int temp;
temp = a;
a = b;
b = temp;
}
int main(){
int a, b;
a = 10;
b = 20;
printf("swap μ : %d %d\n", a, b);
swap(a,b);
printf("swap ν : %d %d\n", a, b);
return 0;
}
//μΆλ ₯
/*
---------------
swap μ : 10 20
swap ν : 10 20
---------------
*/
swap(int a, int b){} : aμ bμ κ°μ μλ‘ λ°κΏμ£Όλ ν¨μswap(a,b); : swap ν¨μλ₯Ό aμ bλ₯Ό μ¬μ©νμ¬ νΈμΆν° νλ¦μμ μ€λͺ
ν΄λ³΄κ² μ΅λλ€.
λ¨Όμ swapμ΄ λμλμ§ μλμλμ§ νμΈμ μν΄ printfλ₯Ό μ¬μ©νμ¬ νμΈν©λλ€.
printf("swap μ : %d %d\n", a, b);
printf("swap ν : %d %d\n", a, b);
swap ν¨μλ₯Ό νΈμΆνμ¬ 2κ°μ μ«μλ₯Ό μλ‘ λ³κ²½μ ν©λλ€.
swap(a,b); //ν¨μ νΈμΆ
β¬οΈ μ κ·Ό
void swap(int a, int b){
int temp;
temp = a;
a = b;
b = temp;
}
μ½λκ° λ€ λμνκ³ λ©λͺ¨λ¦¬λ₯Ό 보면
[λ©λͺ¨λ¦¬]
swap ν¨μ main ν¨μ
---------- ----------
| 20 | a | 10 | a
---------- ----------
| 10 | b | 20 | b
---------- ----------
swap ν¨μ λ΄μμλ μλ‘ λ³κ²½μ΄ λμμ§λ§ main ν¨μλ μ¬μ ν swap μ μ κ°μΌλ‘ μ μ₯λμ΄ μμ΅λλ€.
λ³μμ μ£Όμλ₯Ό μ°Έμ‘°ν΄μ μ¬μ©νκ² λ©λλ€.
μ½λλ‘ μ΄ν΄λ³΄λ©΄
#include <stdio.h>
void swap(int *a, int *b){
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main(){
int a, b;
a = 10;
b = 20;
printf("swap μ : %d %d\n", a, b);
swap(&a,&b);
printf("swap ν : %d %d\n", a, b);
return 0;
}
//μΆλ ₯
/*
---------------
swap μ : 10 20
swap ν : 20 10
---------------
*/
swap(int *a, int *b){} : *aμ *bμ κ°μ μλ‘ λ°κΏμ£Όλ ν¨μswap(&a,&b); : swap ν¨μλ₯Ό &aμ &bλ₯Ό μ¬μ©νμ¬ νΈμΆμμμ μ¬μ©νλ λ°©μκ³Όλ λκ° λ€λ₯΄λ€λ κ²μ λ³΄μ€ μ μμ΅λλ€. β ν¬μΈν° μ¬μ©!
κ·Έλμ Valueκ° μλλΌ ReferenceλΌ λΆλ₯΄κ³ μ΄λ₯Ό μ΄μ©νκ² λλ©΄ μμμμ λ€λ₯΄κ² main ν¨μμμλ κ°μ΄ μλ‘ λ°λκ² λ©λλ€.
μ΄λ κ·Έ μ μ λ΄μ© CμΈμ΄μ κ½πΉ(1)μμ 보μλ ν¬μΈν°κ° λμνλ νλ¦μ μκ°νμλ©΄ λ°λ‘(?) μ΄ν΄κ° λμ€ κ²λλ€.
μμ κ°λ μ 볡μ΅ν κ²Έ ν΄μ μ‘°κΈ μμΈνκ² μ΄ν΄λ³΄κ² μ΅λλ€.
*p = &a
*λ₯Ό μ¬μ©νλ©΄ λ©λͺ¨λ¦¬μ μ μ₯λ κ°μ μ£Όμλ₯Ό μ°Έμ‘°ν΄μ κ°μ μ¬μ©νλ€.μ΄λ₯Ό μ΄μ©ν λ€λ₯Έ ν¨μμμ κ°μ λ°κΎΈλ λ°©λ²μ΄ Call by Reference λλ Call by AdressλΌκ³ λ ν©λλ€.
swap(&a,&b);
β¬οΈ μ κ·Ό
void swap(int *a, int *b){
int temp;
temp = *a;
*a = *b;
*b = temp;
}
swapν¨μμμ int *a = &a;, int *b = &b;λ‘ μ¬μ©ν μ μκ² λ©λλ€.
λΉλ‘ λ€λ₯Έ ν¨μμ§λ§ ν¬μΈν°μ νΉμ§μ 보면 μλ³Έμ μ κ·Όμ νλκΉ mainν¨μμμλ κ°μ΄ μλ‘ λ³κ²½ λ©λλ€.
μ΄μ λ©λͺ¨λ¦¬λ₯Ό 보면
[λ©λͺ¨λ¦¬]
swap ν¨μ main ν¨μ
---------- ----------
| 20 | a | 20 | a
---------- ----------
| 10 | b | 10 | b
---------- ----------
swap ν¨μμ main ν¨μμμ λ³μ a,bλ λκ°μ κ°μ κ°μ§κ² λ©λλ€.