[C μΈμ΄] ν¬μΈν°λ‘ 1μ°¨μ λ°°μ΄ λ€λ£¨κΈ° (μ£Όμ μ κ·Ό λ° μμ κ° μ κ·Ό)

λ°°μ΄κ³Ό ν¬μΈν°μ κ΄κ³
ν¬μΈν°μ λ°°μ΄μ λ§€μ° κΈ΄λ°ν κ΄κ³λ₯Ό κ°κ³ μλ€κ³ μ¬λ¬ μμ λ° μλ£μμ μ΄μΌκΈ° νλ€.
μ΄λ€ λΆλΆμμλ λ°°μ΄μ΄ ν¬μΈν°λ₯Ό λ체νκΈ°λ νκ³ νΉμ ν¬μΈν°κ° λ°°μ΄μ λ체νκΈ°λ νλ€.
λ°°μ΄μ λ°°μΈ λ μ°λ¦¬λ λ€μκ³Ό κ°μ λ΄μ©μ μ μ μμλ€.
λ°°μ΄μ μ΄λ¦(λ³μλͺ )μ ν΄λΉ λ°°μ΄μ μ£Όμμκ³Ό λμμ 첫 λ²μ§Έ μμμ μ£Όμ κ° μ΄λ€!
μμ μκ°μ ν¬μΈν°μμλ λ μ΄λ° λ΄μ©μ μ μ μμλ€.
ν¬μΈν° λ³μμ μ¬ μ μλ κ°μ μ€λ‘μ§ μ£Όμ κ°!
κ·ΈλΌ λ€μ μ½λκ° λμν κΉ?
#include <assert.h>
int main() {
int arr[] = {11, 22, 33, 44};
int *pointer = arr;
return 0;
}
κ·Έλ λ€ μμ μ½λλ μ ν λ¬Έμ κ° μλ μ½λμ΄λ©° μ λμν κ²μ΄λ€.

μλ§ λ©λͺ¨λ¦¬ μ΄λκ°μ μμ κ°μ ννλ‘ μ‘΄μ¬ν κ²μ΄λ©° μ΄κ² λ°λ‘ λ°°μ΄μ ν¬μΈν° λ³μμ μ μ₯νλ λ°©λ²μ΄λ€.
ν¬μΈν°λ‘ λ°°μ΄ μμ μ κ·ΌνκΈ°
λ°°μ΄μμ νΉμ μμμ μ κ·ΌνκΈ° μν΄μλ μΈλ±μ€λ₯Ό μ΄μ©νλ λ°©λ²μ΄ κ°μ₯ ννλ€.
νμ§λ§ ν¬μΈν°λ₯Ό μ΄μ©νλ€λ©΄ ν¬μΈν°μ μ μλ₯Ό μ μ ν μ‘°μνμ¬ μ κ·Ό νλ λ°©μλ μ‘΄μ¬νλ€.
κ·Έ λ°©λ²μ λν΄μ μμ보기 μν΄ λ€μ μ½λλ₯Ό μμ보μ.
#include <stdio.h>
int main() {
int arr[] = {11, 22, 33, 44};
int *pointer = arr;
printf("%010x", pointer + 0);
printf("%010x", pointer + 1);
printf("%010x", pointer + 2);
printf("%010x", pointer + 3);
return 0;
}
μμ μ½λμμ pointer + 1 μ΄ μλ―Ένλ κ²μ 무μμΌκΉ?
(pointer + μ μ) μ μλ―Έ
pointer λ³μμ μ μλ₯Ό λνλ€λ κ²μ ν¬μΈν° λ³μμ λ°μ΄ν° νμ λ§νΌμ byte λ₯Ό λνλ€λ μλ―Έκ° λλ€.
μ΄ λ§μ 무μμ΄λ?
μ¦ λ€μκ³Ό κ°λ€λ μ리μ΄λ€.
- pointer + 0
- pointer λ³μκ° κ°λ¦¬ν€κ³ μλ μ£Όμ κ°μ 0byte λ§νΌμ λν μ£Όμ
- pointer + 1
- pointer λ³μκ° κ°λ¦¬ν€κ³ μλ μ£Όμ κ°μ 4byte λ§νΌμ λν μ£Όμ
- pointer + 2
- pointer λ³μκ° κ°λ¦¬ν€κ³ μλ μ£Όμ κ°μ 8byte λ§νΌμ λν μ£Όμ
μ 4 λ°μ΄νΈμ© μ¦κ°ν κΉ?
μ΄μ λ λ°λ‘ pointer λ³μκ° ν λΉλ λ°μ΄ν° νμ μ΄ integer νμ μ΄λΌ κ·Έλ λ€.
κ·ΈλΌ μμ μ½λλ λ€μκ³Ό κ°μ ννμ λ©λͺ¨λ¦¬ ꡬ쑰λ₯Ό κ°κ² λλ€

ν¬μΈν°λ‘ μ κ·Όν λ°°μ΄ μμμ κ° κ°μ Έμ€κΈ°
μ§λ μκ°μ ν¬μΈν°λ₯Ό μ΄μ©ν λ μ¬μ©νλ μ°Έμ‘° μ°μ°μ * μ λν΄μ μμ보μλ€.
μ°Έμ‘° μ°μ°μκ° λ§μ½ λ³μλͺ μμ μ¬μ©λλ€λ©΄ ν΄λΉ λ©λͺ¨λ¦¬μ μ‘΄μ¬νλ κ°μ λ°ν νλ€κ³ νμΌλ μ°λ¦¬λ μ°Έμ‘° μ°μ°μλ₯Ό μ΄μ©ν΄μ λ°°μ΄μ λͺ¨λ κ°μ μ·¨ν μ μκ² λμλ€.
#include <stdio.h>
int main() {
int arr[] = {11, 22, 33, 44};
int *pointer = arr;
printf("%d", *pointer); // pointer κ° κ°λ¦¬ν€λ arr μ μ£Όμμ 첫 λ²μ§Έ μμμ κ°μΈ 11 μ΄ μΆλ ₯λ¨
return 0;
}
μ°λ¦¬λ μμμ (pointer + μ μ) μ μλ―Έλ₯Ό μ΄μ©ν΄μ λͺ¨λ λ°°μ΄ μμμ κ°μ μ κ·Όν μ μκ² λλ€.
μ£Όμνμ
μ°λ¦¬λ pointer + μ μ λ₯Ό μ΄μ©ν΄μ λͺ¨λ λ°°μ΄ μμμ κ°μ μ κ·Όν μ μλ€κ³ νλλ°, pointer + μ μ κ° μ»΄νμΌλ¬μκ² λͺ ννκ² μ λ¬λμ§ μμΌλ©΄!
μ¦ κ΄νΈλ‘ μ μ νκ² λ¬Άμ§ μμΌλ©΄ λ¬Έμ κ° λ°μνλ€.
*pointer + 1 κ³Ό *(pointer + 1) μ μμ£Ό ν° μ°¨μ΄κ° μλ€λ μ리λ€.
*pointer + 1- pointer λ³μκ° κ°λ¦¬ν€λ μ£Όμμ κ°μ μ μ 1μ λν κ°
*(pointer + 1)- pointer λ³μκ° κ°λ¦¬ν€λ μ£Όμμμ 4byte λ§νΌ μ΄λν μ£Όμμ μ μ₯λ κ°
κ·Έλμ μ°λ¦¬κ° μμ λ°°μ΄ (pointer + μ μ)μ κ°λ
κ³Ό * μ°μ°μμ κ°λ
μ λͺ¨λ μ μ©νλ©΄ λ€μκ³Ό κ°μ μ½λλ₯Ό μ΄ν΄ν μ μκ² λλ€.
#include <assert.h>
int main() {
int arr[] = {11, 22, 33, 44};
int *pointer = arr;
assert(arr[0] == *pointer);
assert(&arr[0] == (pointer + 0));
assert(arr[0] == *(pointer + 0));
assert(&arr[1] == (pointer + 1));
assert(arr[1] == *(pointer + 1));
assert(&arr[2] == (pointer + 2));
assert(arr[2] == *(pointer + 2));
assert(&arr[3] == (pointer + 3));
assert(arr[3] == *(pointer + 3));
return 0;
}