γμ€μ±μ°μ μ΄ν C νλ‘κ·Έλλ°γ μ μ°Έκ³ νμμ΅λλ€.
γμ€μ±μ°μ μ΄ν C νλ‘κ·Έλλ°γ μ€ ν·κ°λ Έλ λ΄μ©μ μ 리ν©λλ€.
12-1 ; ν¬μΈν°λ 무μμΈκ°?
ν¬μΈν°λ₯Ό μ΄μ©νλ©΄ λ©λͺ¨λ¦¬μ μ§μ μ κ·Όμ΄ κ°λ₯νλ€.
ν¬μΈν° λ³μ : μ£Όμ κ°μ μ μ₯μ λͺ©μ μΌλ‘ μ μΈ.
32λΉνΈ μμ€ν μμλ μ£Όμ κ°μ 32λΉνΈλ‘ νννκΈ° λλ¬Έμ ν¬μΈν° λ³μμ ν¬κΈ°κ° 4λ°μ΄νΈμΈ λ°λ©΄,
64λΉνΈ μμ€ν μμλ μ£Όμ κ°μ 64λΉνΈλ‘ νννκΈ° λλ¬Έμ ν¬μΈν° λ³μμ ν¬κΈ°κ° 8λ°μ΄νΈμ΄λ€.
64 * bit = 2^6 * 2 = 2*7
8 * byte = 2^3 * 2^4 = 2*7
64λΉνΈ μμ€ν μμ λμνλ μ»΄νμΌλ¬λ 64λΉνΈλΏλ§ μλλΌ 32λΉνΈλ‘λ μ»΄νμΌμ΄ κ°λ₯νλ€.
λ°λΌμ ν¬μΈν° λ³μ λμμ sizeof μ°μ°μ κ²°κ³Όλ‘ 8μ΄ λ°νλ¨μ νμΈνκΈ° μν΄μλ 64λΉνΈλ‘ μ»΄νμΌμ ν΄μΌ νλ€.
12-2 ; ν¬μΈν°μ κ΄λ ¨ μλ μ°μ°μ: & μ°μ°μμ * μ°μ°μ
& μ°μ°μ : νΌμ°μ°μμ μ£Όμ κ°μ λ°ν.
& μ°μ°μμ νΌμ°μ°μλ λ³μμ¬μΌ ν¨.
intν λ³μμ μ£Όμ κ°μ double ν ν¬μΈν° λ³μμ μ μ₯νκ±°λ κ·Έ λ°λλ μλͺ»λ κ².
* μ°μ°μ : ν¬μΈν°κ° κ°λ¦¬ν€λ λ©λͺ¨λ¦¬ 곡κ°μ μ κ·Όν λ μ¬μ©. (μ°Έμ‘°)
int num, * pnum; λ κ°λ₯νμ§λ§
μ μΈνκ³ μ νλ λ³μμ νμ΄ λ€λ₯΄λ©΄ λ¬Έμ₯μ λ¬λ¦¬ μ μΈνλ κ²μ΄ μ’λ€. (κ°λ μ±)
ν¬μΈν°μ νμ λ©λͺ¨λ¦¬ 곡κ°μ μ°Έμ‘°νλ κΈ°μ€μ΄ λλ€.
μ¦, ν¬μΈν° νμ μ μν μ΄μ λ * μ°μ°μλ₯Ό ν΅ν λ©λͺ¨λ¦¬ 곡κ°μ μ κ·Ό κΈ°μ€μ λ§λ ¨νκΈ° μν¨μ΄λ€.
ν¬μΈν°μ νμ΄ μ‘΄μ¬νμ§ μλλ€λ©΄ * μ°μ°μ ν΅ν λ©λͺ¨λ¦¬μ μ κ·Όμ λΆκ°λ₯νλ€.
λ¬Έμ 12-1 [ν¬μΈν°μ μ΄ν΄]
- λ¬Έμ 2
#include <stdio.h>
int main(int argc, const char * argv[]) {
int num1 = 10, num2 = 20;
int *ptr1 = &num1;
int *ptr2 = &num2;
(*ptr1) += 10; // num1μ 20
(*ptr2) -= 10; // num2λ 10
ptr1 = &num2;
ptr2 = &num1;
printf("ptr1μ΄ κ°λ¦¬ν€λ λ³μ: %d\n", *ptr1);
printf("ptr2μ΄ κ°λ¦¬ν€λ λ³μ: %d\n", *ptr2);
return 0;
}
/*
λ΅μ§μ½λ
int * temp;
temp=ptr1;
ptr1=ptr2;
ptr2=temp;
*/
μλͺ»λ ν¬μΈν°μ μ¬μ©κ³Ό λ ν¬μΈν°
ν¬μΈν°λ₯Ό μ μΈλ§νκ³ μ΄κΈ°ννμ§ μμΌλ©΄, ν¬μΈν° λ³μλ μ°λ κΈ° κ°μΌλ‘ μ΄κΈ°ν λλ€.
ν¬μΈν° λ³μλ₯Ό μ°μ μ μΈλ§ ν΄ λκ³ , μ΄νμ μ ν¨ν μ£Όμ κ°μ μ±μ λ£μ μκ°μ΄λΌλ©΄ 'λ ν¬μΈν°'λ‘ μ΄κΈ°ννλ€.
int main(void){
int * ptr1 = 0;
int * ptr2 = NULL; // NULLμ μ¬μ€μ 0μ μλ―Έ
. . . .
}
ptr1μ μ΄κΈ°ννλ κ° 0μ κ°λ¦¬μΌ 'λ ν¬μΈν°' λΌ νλ€.
0λ²μ§λ₯Ό μλ―Ένλ κ²μ΄ μλλΌ, "μ무λ°λ κ°λ¦¬ν€μ§ μλλ€!" λ₯Ό μλ―Ένλ€.
ν€μλ NULLμ λ ν¬μΈν°λ₯Ό μλ―Ένλ©°, μ€μ λ‘ μ΄λ μμ 0μΌλ‘ μ μλμ΄ μλ€.