[C] λ°°μ΄
π λ€μ΄κ°λ©°
Cλ₯Ό λ°°μ°λ€ 보면 βκ°μ νμ
μ κ° μ¬λ¬ κ°λ₯Ό νκΊΌλ²μ λ€λ€μΌ νλβ μκ°μ΄ μ¨λ€. νμ 5λͺ
μ μ μ, μΌμ 100κ°μ μΈ‘μ κ°μ²λΌ. μ΄κ±Έ λ³μ νλμ νλμ© λ΄μΌλ©΄ score1, score2, β¦ score100μ΄ λμ΄λ²λ¦°λ€. μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ λκ΅¬κ° λ°λ‘ λ°°μ΄(array)μ΄λ€.
λ°°μ΄(array)μ΄λ? λμΌν νμ μ λ°μ΄ν° μ¬λ¬ κ°λ₯Ό νλμ μ΄λ¦μΌλ‘ λ¬Άμ΄ κ΄λ¦¬νλ μ§ν© λ°μ΄ν° ꡬ쑰.
μ΄λ² κΈμμλ λ°°μ΄μ μ μΈΒ·μ΄κΈ°νλΆν° ν¬κΈ° κ³μ°, λ¬Έμμ΄κ³Όμ κ΄κ³, λ€μ°¨μ λ°°μ΄κΉμ§ μμλλ‘ μ 리νλ€.
1. λ°°μ΄μ μ μΈ
λ°°μ΄ λ³μλ λ€μ λ κ°μ§ νμμΌλ‘ μ μΈνλ€.
1
2
νμ
λ°°μ΄λ³μλͺ
[λ°°μ΄κΈΈμ΄]; // κΈΈμ΄λ§ μ§μ
νμ
λ°°μ΄λ³μλͺ
[] = { μ΄κΈ°κ°, ... }; // μ΄κΈ°κ° κ°μλ‘ κΈΈμ΄ μλ κ²°μ
μ¬κΈ°μ λ°λμ κΈ°μ΅ν κ·μΉ νλ. λ°°μ΄ μ²¨μ(index)λ 0λΆν° μμνλ€. κΈΈμ΄κ° 5μΈ λ°°μ΄μ΄λΌλ©΄ μ ν¨ν μΈλ±μ€λ 0 ~ 4λ€.
1
2
3
4
5
6
7
int arr[5];
μΈλ±μ€: 0 1 2 3 4
ββββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ
β arr[0] β arr[1] β arr[2] β arr[3] β arr[4] β
ββββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ
β 첫 λ²μ§Έ β λ§μ§λ§ (κΈΈμ΄-1)
μ€μ λ‘ λ°°μ΄μ νλ λ§λ€μ΄ 보μ.
arrμ΄λΌλ μ΄λ¦μ int νμ
λ°°μ΄μ μμ(λ°©) 5κ°μ§λ¦¬λ‘ μ μΈνλ€. μΈλ±μ€ 0λΆν° 4κΉμ§ κ°κ° 1~5μ κ°μ λ£μλ€. μ΄μ printf("%d", arr[2]);λ‘ 3λ²μ§Έ μμ(arr[2])μ κ°μ΄ μ λλ‘ λ€μ΄κ°λμ§ νμΈνλ€.
arr[2], μ¦ μΈ λ²μ§Έ μμμ κ°μ΄ μ νν μΆλ ₯λλ€.
2. λ°°μ΄ μ΄κΈ°ν
λ°°μ΄μ μ μΈλ§ νκ³ μ΄κΈ°ννμ§ μμΌλ©΄ μ°λ κΈ°κ°(garbage value)μ΄ λ€μ΄κ°λ€. λ°λΌμ μ΄κΈ°νλ μ€μνλ€. μ΄κΈ°ν λ°©λ²μ ν¬κ² λ€ κ°μ§λ€.
| λ°©λ² | μμ | μ€λͺ |
|---|---|---|
| β νλμ© λμ | arr[0]=1; arr[1]=2; β¦ | μμλ§λ€ μ§μ λμ . κΈΈμ΄κ° ν¬λ©΄ λ²κ±°λ‘μ |
| β‘ μ μΈκ³Ό λμμ | int arr[3] = {0,1,2}; | κ°μ₯ μΌλ°μ μΈ λ°©μ |
| ⒠첫 μμλ§ μ§μ | int arr[100] = {0}; | λλ¨Έμ§ 99κ°λ μλμΌλ‘ 0 |
| β£ κΈΈμ΄ μλ΅ | int arr[] = {1,2,3}; | μ΄κΈ°κ° κ°μλ‘ κΈΈμ΄(=3) μλ κ²°μ |
π‘ β’λ²μ ν¬μΈνΈ:
{0}μΌλ‘ 첫 μμλ§ μ§μ ν΄λ λλ¨Έμ§ μμλ μ λΆ 0μΌλ‘ μ΄κΈ°νλλ€. μ΄κ±΄ 첫 κ°μ΄ νν 0μ΄λΌμκ° μλλΌ, μ΄κΈ°ν λͺ©λ‘μ ν¬ν¨λμ§ μμ μμλ 무쑰건 0μΌλ‘ μ±μμ§κΈ° λλ¬Έμ΄λ€.int arr[100] = {7}μ΄λΌ ν΄λ λλ¨Έμ§ 99κ°λ 7μ΄ μλλΌ 0μ΄ λλ€.
3. λ°°μ΄μ ν¬κΈ°(size)μ κΈΈμ΄(length)
λ κ°λ μ μ΄λ¦μ΄ λΉμ·ν΄μ ν·κ°λ¦¬κΈ° μ½μ§λ§ μμ°ν λ€λ₯΄λ€.
| μ©μ΄ | μλ―Έ | μμ (int arr[3]) |
|---|---|---|
| ν¬κΈ°(size) | λ°°μ΄μ΄ μ°¨μ§νλ μ΄ λ°μ΄νΈ | 4 byte Γ 3 = 12 byte |
| κΈΈμ΄(length) | μμμ κ°μ | 3 |
ν¬κΈ°λ μμ νμ
μ ν¬κΈ°μ λ°λΌ κ²°μ λλ€. intλ 4byteμ΄λ―λ‘, int νμ
μ κΈΈμ΄ 4μΈ λ°°μ΄μ μ΄ 4 Γ 4 = 16 byteκ° λλ€.
μ¬κΈ°μ sizeof() μ°μ°μκ° λ±μ₯νλ€. λ°μ΄ν°μ ν¬κΈ°λ₯Ό λ°μ΄νΈ(μ μ)λ‘ λλ €μ£Όλ μ°μ°μλ€.
1
2
3
sizeof(int) // 4
sizeof(char) // 1
sizeof(double) // 8
μ΄κ±Έ νμ©νλ©΄ λ°°μ΄μ κΈΈμ΄λ₯Ό μ§μ κ³μ°ν μ μλ€.
1
λ°°μ΄ κΈΈμ΄ = sizeof(λ°°μ΄μ΄λ¦) / sizeof(λ°°μ΄μμνμ
);
sizeof(λ°°μ΄μ΄λ¦)μ λ°°μ΄ μ 체 ν¬κΈ°(μμνμ
ν¬κΈ° Γ κΈΈμ΄)λ₯Ό λλ €μ£Όλ―λ‘, μ¬κΈ°μ μμ νλμ ν¬κΈ°λ‘ λλλ©΄ κΈΈμ΄λ§ λ¨λλ€.
1
2
3
4
5
6
int arr[3];
sizeof(arr) = 4 Γ 3 = 12 (μ 체 ν¬κΈ°)
sizeof(int) = 4 (μμ νλμ ν¬κΈ°)
ββββββββββββββββββββββββββββββββ
κΈΈμ΄ = 12 / 4 = 3 β
β οΈ Cμμλ κΈΈμ΄ 0μ§λ¦¬ λ°°μ΄μ μ μΈν μ μλ€.
4. λ°°μ΄μμ μ΅λκ°Β·μ΅μκ° κ΅¬νκΈ°
λ°°μ΄ νλλ₯Ό λ§λ€μ΄ μ΅λκ°μ κ΅¬ν΄ λ³΄μ.
μμ MAXλ₯Ό 5λ‘ μ§μ νκ³ forλ¬ΈμΌλ‘ κΈΈμ΄ 5μΈ int λ°°μ΄ arrμ κ° 5κ°λ₯Ό μ
λ ₯νλ€. κ·Έλ λ€λ©΄ μ΄ μμμ μ΅λκ°μ μ΄λ»κ² μ°ΎμκΉ?
μμκ° 5κ°λ©΄ 첫 λ²μ§Έμ λ λ²μ§Έλ₯Ό λΉκ΅νκ³ , κ·Έλ€μ, κ·Έλ€μβ¦ κ²°κ΅ 4λ²μ λΉκ΅κ° νμνλ€. μμκ° 100κ°λ©΄ 99λ²μ λΉκ΅ν΄μΌ νλ μμΌλ‘λ λΆκ°λ₯νλ€. κ·Έλμ λ°λ³΅λ¬Έμ μ΄λ€.
λμ μ리λ μ΄λ λ€.
1
2
3
4
5
1. max β arr[0] (첫 μμλ₯Ό νλ³΄λ‘ λ£λλ€)
2. i = 1λΆν° λ§μ§λ§κΉμ§ λ°λ³΅
if (arr[i] > max) (λ ν° κ°μ λ§λλ©΄)
max β arr[i] (ν보λ₯Ό κ°±μ νλ€)
3. λ°λ³΅μ΄ λλλ©΄ max = μ΅λκ°
maxλΌλ λ³μμ 첫 λ²μ§Έ μμλ₯Ό λ£κ³ , forλ¬ΈμΌλ‘ (iλ 1λΆν°) λ ν° κ°μ λ§λ λλ§λ€ maxλ₯Ό κ°±μ νλ€. λ§μ§λ§ μμκΉμ§ λλ©΄ maxμ μ΅λκ°μ΄ λ¨λλ€.
π‘ μ΅μκ°μ λΆλ±νΈ λ°©ν₯λ§ λ°λ(
arr[i] < min)λ‘ λ°κΎΈλ©΄ κ·Έλλ‘ κ΅¬ν μ μλ€.
5. λ°°μ΄κ³Ό λ¬Έμμ΄(string)
Cμλ λ³λμ λ¬Έμμ΄ νμ
μ΄ μλ€. Cμμ βλ¬Έμμ΄βμ μ 체λ char[] λ°°μ΄μ΄λ€. μ ννλ λμ΄ '\0'(null λ¬Έμ)λ‘ λλλ char[] λ°°μ΄μ΄λ€.
null λ¬Έμ(
'\0')λ κ³΅λ°±μ΄ μλλ€. 곡백(' ')μ λμ 보μ΄μ§ μμ λΏ μμ°ν νλμ λ¬Έμμ§λ§, nullμ 0byte ν¬κΈ°μ, λ¬Έμμ΄μ λμ μ리λ νμμ΄λ€.
μλ₯Ό λ€μ΄ char str1[20] = "nice";λ κ° μμμ n, i, c, eκ° λ€μ΄κ°κ³ , 5λ²μ§Έ μμ str1[4]μλ μλμΌλ‘ null λ¬Έμκ° λ€μ΄κ°λ€.
1
2
3
4
5
6
7
char str1[20] = "nice";
μΈλ±μ€: 0 1 2 3 4 5 ...
ββββββ¬βββββ¬βββββ¬βββββ¬βββββββ¬βββββ
β n β i β c β e β \0 β ...
ββββββ΄βββββ΄βββββ΄βββββ΄βββββββ΄βββββ
β μ¬κΈ°μ λ¬Έμμ΄ λ
κ·Έλ°λ° μ΄λ κ² νλ©΄ μ΄λ»κ² λ κΉ?
1
char str2[] = {'n','i','c','e'}; // null λ¬Έμκ° μλ€!
nice λ€μ μ΄μν λ¬Έμκ° λΈλ € λμ¨λ€. μ»΄νμΌλ¬λ null λ¬Έμλ₯Ό λ§λ λκΉμ§ κ³μ μ½λλ°, μ λ°°μ΄μλ λμ nullμ΄ μμ΄μ λ©λͺ¨λ¦¬μ μλ±ν κ°κΉμ§ λ¬Έμμ΄λ‘ μ½μ΄λ²λ¦° κ²μ΄λ€. λ°λΌμ μλμ²λΌ null λ¬Έμλ₯Ό μ§μ λ£μ΄μ€μΌ νλ€.
1
char str2[] = {'n','i','c','e','\0'}; // μ΄μ niceλ§ μΆλ ₯λλ€
6. λ€μ°¨μ λ°°μ΄(n-dimensional array)
λ€μ°¨μ λ°°μ΄μ λ°°μ΄ μ²¨μλ₯Ό μ¬λ¬ κ° μ¬μ©ν κ²μ΄λ€. 첨μ 2κ°λ₯Ό μ°λ©΄ 2μ°¨μ λ°°μ΄μ΄λ€.
μ΄λμ μΈκΉ? νλκ° 2κ° μ΄μμΈ μλ£λ₯Ό λ€λ£° λ μ μ©νλ€. μλ₯Ό λ€μ΄ νμ 5λͺ
μ΄ κ°κ° 4κ³Όλͺ© μνμ λ΄€κ³ κ·Έ μ μλ₯Ό μ μ₯ν λ, arr[νμ][κ³Όλͺ©] ννλ‘ λ€λ£¨λ©΄ κΉλνλ€.
μ μΈμ μ΄λ κ² νλ€.
1
int arr[4][3]; // 4ν 3μ΄ (νλ ¬λ‘ λ³΄λ©΄ 4Γ3)
μ΄κΈ°νλ 1μ°¨μ λ°°μ΄κ³Ό μλ¦¬κ° κ°μ§λ§, forλ¬Έμ μ€μ²©ν΄μ μ¬μ©νλ€.
λ°κΉ₯ forκ° νμ, μμͺ½ forκ° μ΄μ λλ©΄μ [0][0], [0][1], [0][2], [1][0], β¦ μμλ‘ κ°μ μ±μ΄λ€.
1
2
3
4
5
μ΄0 μ΄1 μ΄2
ν0 [0][0][0][1][0][2]
ν1 [1][0][1][1][1][2]
ν2 [2][0][2][1][2][2]
ν3 [3][0][3][1][3][2]
첫 μμλ§ μ§μ νκ³ λλ¨Έμ§λ₯Ό 0μΌλ‘ μ΄κΈ°ννλ λ°©λ²(int arr[4][3] = {0};)λ 1μ°¨μ λ°°μ΄κ³Ό λμΌνκ² λμνλ€.
π μ 리
1
2
3
4
5
6
7
8
λ°°μ΄(array)
ββ μ μΈ int arr[5]; λλ int arr[] = {...}; (μΈλ±μ€λ 0λΆν°)
ββ μ΄κΈ°ν β νλμ© β‘ μ μΈκ³Ό λμμ β’ {0}μΌλ‘ μ 체 0 β£ κΈΈμ΄ μλ΅
ββ ν¬κΈ°/κΈΈμ΄ size = μ΄ byte, length = μμ κ°μ
β κΈΈμ΄ = sizeof(λ°°μ΄) / sizeof(μμνμ
)
ββ μ΅λ/μ΅μ 첫 μμλ₯Ό νλ³΄λ‘ λκ³ λ°λ³΅νλ©° κ°±μ
ββ λ¬Έμμ΄ char[] λ°°μ΄ + λμ λ°λμ '\0'
ββ λ€μ°¨μ arr[ν][μ΄], μ΄κΈ°νλ μ€μ²© forλ¬Έ
| κ°λ | ν μ€ μ μ |
|---|---|
| λ°°μ΄ | κ°μ νμ λ°μ΄ν°λ₯Ό νλμ μ΄λ¦μΌλ‘ λ¬Άμ μ§ν© |
| 첨μ(index) | μμμ μμΉ. 0λΆν° μμ |
| μ°λ κΈ°κ° | μ΄κΈ°ννμ§ μμ μμμ λ€μ΄μλ μλ―Έ μλ κ° |
| sizeof | λ°μ΄ν°μ ν¬κΈ°λ₯Ό byteλ‘ λλ €μ£Όλ μ°μ°μ |
| null λ¬Έμ | '\0', C λ¬Έμμ΄μ λμ μ리λ νμ |
| λ€μ°¨μ λ°°μ΄ | 첨μλ₯Ό 2κ° μ΄μ μ¬μ©ν λ°°μ΄ |
μ€λμ λ°°μ΄μ λν΄μ μμλ΄€λ€. μΈλ±μ€κ° 0λΆν° μμνλ€λ κ², κ·Έλ¦¬κ³ C λ¬Έμμ΄μ λ°λμ '\0'μΌλ‘ λλμΌ νλ€λ λ κ°μ§λ§ νμ€ν μ‘κ³ κ°μ!







Comments powered by Disqus.