[C] ν¬μΈν°, malloc()
π‘ ν¬μΈν°
: μ£Όμλ₯Ό μ μ₯νλ λ³μ
: ν¬μΈν° λ³μλ μλ£νμ μκ΄ μμ΄ λ©λͺ¨λ¦¬ ν¬κΈ°κ° μΈμ λ λμΌνλ€. <- λͺ¨λ 4λ°μ΄νΈ
cf) μ§μ΄ μλ ν¬λ μ£Όμμ ννλ λμΌνλ€.
ex) μ«μ, λ¬Έμ μ μ₯ -> λ³μ μ μΈ
μ΄λ€ λ³μμ λ©λͺ¨λ¦¬ μ£Όμ μ μ₯ -> ν¬μΈν° λ³μ μ μΈ
β μ£Όμ μ°μ°μ &
ν΄λΉ λ³μμ μ£Όμ => &λ³μλͺ
* μ€μ λ³μμ μ£Όμ 104== &λ³μλͺ λμΌνλ€.
β <μμ°Έμ‘°> κ°λ¦¬ν€λ λμ λ³μλ₯Ό μ°Έμ‘°ν μ μλ€. μ¦, λμ λ³μμ μ κ·Ό ν μ μλ€.
=> ν¬μΈν° λ³μλ₯Ό ν΅ν΄ κ°λ¦¬ν€λ λ³μμ κ°μ μ€μ ν μ μλ€.
β ν¨μμ ν¨μ μ¬μ΄μ κ°μ μ£Όκ³ λ°μ λ ν¬μΈν°λ₯Ό μ¬μ©ν΄ μ£Όμ κ°μ μ λ¬νλ©΄ λ³μμ μ£Όμκ° μ λ¬λλ€.
=> μ£Όμλ₯Ό μ λ¬λ°μ ν¨μ μμμ ν¨μλ₯Ό νΈμΆν κ³³μ λ³μ κ°μ λ³κ²½ν μ μλ€.
π‘ μ¬μ©
1. ν¬μΈν° λ³μλ₯Ό μ μΈνκ³ μ ν λ
2. μμ°Έμ‘°λ₯Ό ν λ μ¬μ©.
: μ μν μ£Όμλ₯Ό μ μ₯νλ λ³μ b μ μΈ => int *b;
ex) int* b = &λ³μλͺ (104λ²μ§);
: bκ° 104λ²μ§μ λ³μλ₯Ό κ°λ¦¬ν€κ³ μλ€.
β κ°μ μ°μ°μ *
: *ν¬μΈν° λ³μλ₯Ό ν΅ν΄ ν¬μΈν° λ³μκ° κ°λ¦¬ν€λ λ³μμ κ°μ μ€μ ν μ μλ€.
#include <stdio.h>
int main() {
int a = 10;
printf("a >> %d\n", a); // 10
int* b = &a;
*b = 20;
printf("a >> %d\n", a); // 20
return 0;
}
π‘ μ¬μ©μ΄μ
β κ°μ μν νΈμΆ Call by Value
: ν¨μ νΈμΆμ νλ©΄μ κ°μ μ λ¬νλ λ°©μ
: main() -> a() -> main() ν¨μλ‘ λ³μλ₯Ό μ λ¬νλ©΄μ λ³μμ κ°μ΄ 볡μ¬λλ€.
, ν¨μλ κ°κ° λ³μμ λ©λͺ¨λ¦¬ μμμ΄ λ€λ₯΄λ―λ‘ μλ‘μκ² μν₯μ μ€ μ μλ€.
=> ν¨μ νΈμΆμ μ£Όμλ₯Ό μ λ¬ν΄ λ³μμ κ°μ λ³κ²½ν μ μλλ‘ νλ€.
=> μ£Όμλ₯Ό λ겨μ€κ²μ΄κΈ° λλ¬Έμ μ£Όμλ₯Ό μ μ₯νλ ν¬μΈν° λ³μλ₯Ό μ΄μ©ν΄μΌνλ€.
β μ£Όμμ μν νΈμΆ Call by Address
: ν¨μμμ κ°μ΄ μλ μ£Όμλ₯Ό λ€λ₯Έ ν¨μλ‘ μ λ¬νλ λ°©μ
π‘ ν¬μΈν° λ°°μ΄
: λ©λͺ¨λ¦¬ λ°©μ μ£Όμλ 1. μ«μλ‘ 2. λ°°μ΄ μ΄λ¦μΌλ‘ ννν μ μλ€.
ex) &a[0] μ£Όμμ°μ°μ μ¬μ©κ°λ₯
: λ°°μ΄μ μ΄λ¦ == &λ°°μ΄λͺ [0] => λ°°μ΄μ μ΄λ¦μ΄μ λ°°μ΄μ 첫λ²μ§Έ μ£Όμ
: ν¬μΈν°λ₯Ό μ΄μ©ν΄ 첫λ²μ§Έ μ£Όμ λΏλ§ μλλΌ λ°°μ΄μ μ΄λλ μ§ κ°λ¦¬ν€κ² ν μ μλ€.
=> ν¬μΈν° μ£Όμ κ° μ°μ° +1μ μ¦κ°κ° μλλΌ λ°°μ΄ ν μΉΈ λ°μ΄νΈ ν¬κΈ°λ₯Ό μλ―Έ.
: ν¬μΈν°λ λ³μλ€, λ³μλ λ°°μ΄λ‘ ꡬμ±ν μ μλ€.
ex) int* a[2];
: λ¬Έμμ΄ μ²λ¦¬ν λ μμ£Ό μ¬μ©
π‘ ν¬μΈν°μ ν¬μΈν° **
: ν¬μΈν° λ³μμ μ£Όμλ₯Ό μ μ₯
π‘ λ¬Έμμ΄ μ μ₯
1. λ¬Έμ λ°°μ΄ μ΄μ© char a[10] = "Hello";
2. λ¬Έμ μλ£ν ν¬μΈν° λ³μ μ΄μ© char* a = "Hello";
=> ν¬μΈν° λ³μλ λ°νλλ μ£Όμλ₯Ό ν λΉ λ°μ λ¬Έμμ΄μ΄ μ μ₯λ μμΉλ₯Ό κΈ°μ΅νλ κ²
3. λμ λ©λͺ¨λ¦¬ ν λΉ
π‘ λμ λ©λͺ¨λ¦¬ ν λΉ
: κ·Έλ κ·Έλ μν©μ λ°λΌ λ³κ²½ κ°λ₯ν.
: μ μ μΌλ‘ 미리 μ ν΄μ Έ μμ§ μκ³ , λμ μΌλ‘ κ²°μ λλ€.
== μ¦ μ½λκ° μνλλ©΄μ μν©μ λ°λΌ κ·Έλ κ·Έλ νμν ν¬κΈ°λ§νΌ λ©λͺ¨λ¦¬λ₯Ό ν λΉ λ°μ μ¬μ©νλ€.
: malloc() ν¨μκ° λλ main() ν¨μλ‘ λμ΄κ°λ μ μ₯λ λ©λͺ¨λ¦¬λ μ¬λΌμ§μ§ μλλ€.
β malloc() ν¨μμ΄μ© + free(ν¬μΈν° λ³μ)
: #include <stdlib.h> ν€λνμΌ
: μνλ λ°μ΄νΈ μλ§νΌ λ©λͺ¨λ¦¬ 곡κ°μ ν λΉ λ°λλ€.
: κ²°κ³Ό κ°μΌλ‘ ν λΉ λ°μ λ©λͺ¨λ¦¬μ μ£Όμλ₯Ό λ°ν. == ν¨μλ₯Ό νΈμΆν κ³³μ κ²°κ³Όλ‘ ν λΉ λ°μ λ©λͺ¨λ¦¬μ μ£Όμλ₯Ό μ λ¬νλ€.
β free(ν¬μΈν° λ³μ)
: ν λΉ λ°μ λ©λͺ¨λ¦¬ μ¬μ© ν malloc() ν¨μλ‘ ν λΉ λ°μ λ©λͺ¨λ¦¬λ₯Ό μμ€ν μ λ°ννλ€.