| 포인터λ₯Ό μ΄ν•΄ν•˜κΈ° μ•žμ„œ |

- 32λΉ„νŠΈμ—μ„œ μž‘λ™ν•˜λŠ” 컴퓨터듀은 μ£Όμ†Œκ°’μ˜ 크기가 λͺ¨λ‘ 32bit(4byte)μž„

  (64λΉ„νŠΈ μ»΄ν“¨ν„°μ—μ„œλŠ” 64bit(8byte)

  : 32λΉ„νŠΈλ‘œ μ‚¬μš©ν•  수 μžˆλŠ” μ£Όμ†Œκ°’μ˜ κ°€μ§€μˆ˜λŠ” 2의 32승 byte(=4GB)

   μ¦‰, RAM은 μ΅œλŒ€ 4GBκΉŒμ§€ 밖에 μ‚¬μš©ν•  수 μ—†μŒ

 

| 포인터 | : λ©”λͺ¨λ¦¬ 상에 μœ„μΉ˜ν•œ νŠΉμ •ν•œ λ°μ΄ν„°μ˜ (μ‹œμž‘)μ£Όμ†Œκ°’μ„ λ³΄κ΄€ν•˜λŠ” λ³€μˆ˜

- 포인터도 νŠΉμ •ν•œ 데이터λ₯Ό λ³΄κ΄€ν•˜λŠ” 'λ³€μˆ˜'

                  β””> νŠΉμ •ν•œ 데이터가 μ €μž₯된 μ£Όμ†Œκ°’

 

  - 포인터도 ν˜•(type)이 μžˆλ‹€ 

    ☞ intν˜• λ°μ΄ν„°μ˜ μ£Όμ†Œκ°’μ„ μ €μž₯ν•˜λŠ” 포인터 ≠ charν˜• λ°μ΄ν„°μ˜ μ£Όμ†Œκ°’μ„ μ €μž₯ν•˜λŠ” 포인터

 

- ν¬μΈν„°μ˜ μ •μ˜ :

(포인터에 μ£Όμ†Œκ°’μ΄ μ €μž₯λ˜λŠ” λ°μ΄ν„°μ˜ ν˜•) *(ν¬μΈν„°μ˜ 이름);

λ˜λŠ”

(포인터에 μ£Όμ†Œκ°’μ΄ μ €μž₯λ˜λŠ” λ°μ΄ν„°μ˜ ν˜•)* (ν¬μΈν„°μ˜ 이름);

ex) int *p;  λ˜λŠ” int* p;  

    ☞ pλŠ” intν˜• λ°μ΄ν„°μ˜ μ£Όμ†Œκ°’μ„ μ €μž₯ν•˜λŠ” λ³€μˆ˜

 

| & μ—°μ‚°μž |

β€» μ—°μ‚°μž & (AND)λŠ” λ‘κ°œμ˜ ν”Όμ—°μ‚°μžλ₯Ό μ‚¬μš©ν•¨

- 단항(unary) μ—°μ‚°μž : ν”Όμ—°μ‚°μžκ°€ 1개인 μ—°μ‚°μž, AND와 λ‹€λ₯΄κ²Œ 해석됨

- 단항 & μ—°μ‚°μž : ν”Όμ—°μ‚°μžμ˜ μ£Όμ†Œκ°’μ„ 뢈러옴

&/* μ£Όμ†Œκ°’μ„ 계산할 데이터 */

   ex) &a  : a의 μ£Όμ†Œκ°’μ΄ λΆˆλ €μ €μ˜΄.

/* & μ—°μ‚°μž */
#include <stdio.h>
int main() {
  int a;
  a = 2;

  printf("%p \n", &a);
  return 0;
}

의 결과

- a의 μ£Όμ†Œ(포인터)λ₯Ό 16μ§„μˆ˜λ‘œ 좜λ ₯ %p (%d 둜 좜λ ₯μ‹œ 10μ§„μˆ˜λ‘œ ν‘œκΈ°)

- 0x7fff80505b64 둜 좜λ ₯ λ˜μ—ˆμ§€λ§Œ μ‹€μ œλ‘œλŠ” μ£Όμ†Œκ°’μ˜ 크기인 8λ°”μ΄νŠΈ(16μ§„μˆ˜λ‘œ 16자리)μ—μ„œ 0이 μž˜λ¦°κ²ƒ

  μ‹€μ œ μ£Όμ†Œκ°’ : 0x00007fff80505b64

 

- ν•œλ²ˆ μ •μ˜ 된 λ³€μˆ˜μ˜ μ£Όμ†Œκ°’μ€ λ°”λ€Œμ§€ μ•ŠλŠ”λ‹€.

 

| * μ—°μ‚°μž | : μ£Όμ†Œκ°’μ— λŒ€μ‘λ˜λŠ” 데이터λ₯Ό κ°€μ Έμ˜€λŠ” μ—°μ‚°μž

β€» κ³±μ…ˆ μ—°μ‚°μž * λŠ” λ‘κ°œμ˜ ν”Όμ—°μ‚°μžλ₯Ό μ‚¬μš©ν•¨

- 단항(unary) μ—°μ‚°μž : ν”Όμ—°μ‚°μžκ°€ 1개인 μ—°μ‚°μž, κ³±μ…ˆ μ—°μ‚°κ³Ό λ‹€λ₯΄κ²Œ 해석됨

- 단항 * μ—°μ‚°μž : μ£Όμ†Œκ°’μ— μžˆλŠ” 데이터λ₯Ό 뢈러옴

ex)

/* * μ—°μ‚°μžμ˜ 이용 */
#include <stdio.h>
int main() {
  int *p;
  int a;

  p = &a;
  a = 2;

  printf("a 의 κ°’ : %d \n", a);
  printf("*p 의 κ°’ : %d \n", *p);

  return 0;
}

  *p : λ‚˜(p)에 μ €μž₯된 μ£Όμ†Œκ°’μ— μœ„μΉ˜ν•œ 데이터 즉, *p와 aλŠ” 동일함 

 

- 포인터 p μ— μ–΄λ–€ λ³€μˆ˜ a μ˜ μ£Όμ†Œκ°’μ΄ μ €μž₯λ˜μ–΄ μžˆλ‹€λ©΄ '포인터 p λŠ” λ³€μˆ˜ a λ₯Ό 가리킨닀'라고 함.

 

- 포인터도 자기 μžμ‹ λ§Œμ˜ μ£Όμ†Œλ₯Ό κ°€μ§€κ³  있음.

 

| ν¬μΈν„°μ—λŠ” μ™œ νƒ€μž…μ΄ μžˆμ„κΉŒ |

- ν¬μΈν„°λŠ” κ°€λ¦¬ν‚€λŠ” λ³€μˆ˜μ˜ μ£Όμ†Œκ°’ μ „μ²΄μ˜ 정보가 μ•„λ‹ˆλΌ μ£Όμ†Œκ°’μ˜ μ‹œμž‘ μ •λ³΄λ§Œ κ°€μ§€κ³ μžˆκΈ° λ•Œλ¬Έμ—,

   ν¬μΈν„°κ°€ κ°€λ₯΄ν‚€λŠ” λ³€μˆ˜μ˜ ν˜•μ„ μ •ν•΄μ£Όμ§€ μ•ŠμœΌλ©΄ *pν–ˆμ„ λ•Œ λ©”λͺ¨λ¦¬μ—μ„œ μ–Όλ§ˆλ§ŒνΌ 읽어야 ν•˜λŠ”μ§€ μ•Œ 수 μ—†κΈ° λ•Œλ¬Έ

  ex)

int a;
int *p;
p = &a;
*p = 4;

 μ»΄ν“¨ν„°λŠ” 포인터 p κ°€ int * λΌλŠ” 사싀을 보고 μ΄ ν¬μΈν„°λŠ” int λ°μ΄ν„°λ₯Ό κ°€λ¦¬ν‚€λŠ” 것을 μ•Œκ²Œ λ˜μ–΄ μ‹œμž‘ μ£Όμ†Œλ‘œ λΆ€ν„° μ •ν™•νžˆ 4 λ°”μ΄νŠΈλ₯Ό 읽어 λ“€μ–΄ 값을 λ°”κΎΈκ²Œ 됨

| 포인터도 λ³€μˆ˜λ‹€ | : 포인터에 λ“€μ–΄κ°„ μ£Όμ†Œκ°’μ΄ λ°”λ€” 수 μžˆλ‹€.

ex) a의 μ£Όμ†Œκ°’μ΄ λ“€μ–΄κ°”λ‹€κ°€ b의 μ£Όμ†Œκ°’μ΄ λ“€μ–΄κ°ˆ 수 μžˆλ‹€.

 

https://modoocode.com/23

 

μ”Ήμ–΄λ¨ΉλŠ” C μ–Έμ–΄ - <12 - 1. ν¬μΈν„°λŠ” μ˜ν¬μ΄λ‹€! (포인터)>

 

modoocode.com

 

λ°˜μ‘ν˜•

+ Recent posts