๋ฐ์ํ
1. ๋ฐฐ๊ฒฝ์ง์
- ๋ณ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ
- ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐ์ดํธ ๋จ์๋ก ์ก์ธ์ค๋จ
- ๋ณ์์ ํฌ๊ธฐ์ ๋ฐ๋ผ. ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋ฌ๋ผ์ง
2. *ํฌ์ธํฐ - ์ ์ธ ํ ๋๋ฅผ ์ ์ธํ๋ฉด, ๊ฐ ๋ถ์ผ๋ฉด ํด๋น ์ฃผ์์ ๊ฐ์ ์๋ฏธํด!
- ํฌ์ธํฐ : ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ณ์
- ํฌ์ธํฐ ๋ณ์(ํฌ์ธํฐ) : ‘ *(๋ณ์๋ช ) ‘ ์ ํํ๋ฅผ ๊ฐ์ง๊ณ , ๋ณ์์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๋ณ์
- & : ๋ณ์์ ์ฃผ์๋ฅผ ๊ณ์ฐํ๋ ์ฐ์ฐ์
-
- ๋ ๊ฐ์ ์ฐธ์กฐ ์ฐ์ฐ์๋ก, ๊ฐ๋ฆฌํค๋ ์ฃผ์๊ฐ ๋ด์ ๋ด์ฉ๊ฐ์ ์ฐธ์กฐํจ
- %p : ์ฃผ์๋ฅผ ๋ํ๋ด๋ ํํ (16์ง์)
- ํฌ์ธํฐ์ ํ์ ๊ณผ ๋ณ์์ ํ์ ์ ๊ฐ์์ผ ํจ
int j = 0;
int *q;
q = &j;
// ์ ์๋ ํํ์ ๊ฐ์ ์๋ฏธ์
๋๋น
int i = 0;
int *p = &i;
3. NULL ํฌ์ธํฐ
- ํฌ์ธํฐ ์ ์ธ์ NULL๋ก ์ด๊ธฐํ
- stdio.h ๋ด์ #define NULL 0์ผ๋ก ์ ์๋จ
4. ํฌ์ธํฐ์ ์ฐ์ฐ
- ์ฆ๊ฐ, ๊ฐ์, ๋ง์ , ๋บ์ ์ฐ์ฐ์ด ๊ฐ๋ฅํจ
- ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด์ ํฌ๊ธฐ๋งํผ ๊ฐ์ด ์ฆ๊ฐ๋จ
- *p++ = *(p++) : p๊ฐ ๊ฐ๋ฆฌํค๋ ๊ณณ์ ๊ฐ์ ๋์ ํ ํ p(์ฃผ์)๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
- *++p = *(++p) : p(์ฃผ์)๋ฅผ ์ฆ๊ฐ์ํจ ํ์ p๊ฐ ๊ฐ๋ฆฌํค๋ ๊ณณ์ ๊ฐ์ ๋์ ํ๋ค.
- (**p)++ = (**p)++ : p๊ฐ ๊ฐ๋ฆฌํค๋ ๊ณณ์ ๊ฐ์ ๋์ ํ ํ์ ๊ฐ์ ์ฆ๊ฐํ๋ค.
- ++*p = ++(*p) : p๊ฐ ๊ฐ๋ฆฌํค๋ ๊ณณ์ ๊ฐ์ ์ฆ๊ฐํ ํ ๋์ ํ๋ค.
- ์์ ์์ผ๋ฉด, ์ฃผ์๋ฅผ ๋ณํ์ํค๊ณ / ๋ฐ์ ์์ผ๋ฉด, ๊ฐ์ ๋ณํ์ํด
5. ๋ฐฐ์ด ์ญ์ ํฌ์ธํฐ์ ์ผ์ข ์!
- [ ] ์์ด ์ฌ์ฉํ๋ฉด, ์ฃผ์๋ฅผ ๋ํ๋ = ๋ฐฐ์ด๋ช ์ ์ฒซ ๊ฐ์ ์ฃผ์๋ฅผ ์๋ฏธํด!
- (๋ฐฐ์ด๋ช ) + a = &(๋ฐฐ์ด๋ช )[a] ์ ๊ฐ์
- *(๋ฐฐ์ด๋ช + a) = (๋ฐฐ์ด๋ช )[a]
- ํฌ์ธํฐ๋ฅผ ๋ฐฐ์ด ์ด๋ฆ์ฒ๋ผ ์ฌ์ฉํ ์ ์์
int a[] = {1, 2, 3, 4, 5};
int *p = a;
p[0] = 10;
p[1] = 20;
p[2] = 30;
6. Call-by-value - Call-by-reference
- ๊ฐ์ด ‘๋ณต์ฌ’๋์ด ์ ๋ฌ - ์ฃผ์(์๋ณธ)๊ฐ ์ ๋ฌ๋จ
- ํจ์๊ฐ ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ, ํด๋น ๋ณ์๋ ๊ด์ญ ๋ณ์์ฌ์ผ ํจ (์๋ ๊ฒฝ์ฐ์๋ ๋ณ์๊ฐ ์ฌ๋ผ์ ธ ์ํ)
7. Void ํฌ์ธํฐ!
- ๊ฐ๋ฆฌํค๋ ์๋ฃํ์ ๋ํ ์ ๋ณด๊ฐ ์์ → ํ๋ณํ ํ์ฌ ์ฌ์ฉ ( *(์๋ฃํ *)๋ณ์) )์ ํํ๋ก ์ฌ์ฉ
- ๋ชจ๋ ํฌ์ธํฐ๋ฅผ ์ ์ฅํ ์ ์์
8. ๊ธฐํธ ์์
- #define ๊ธฐํธ์์์ด๋ฆ ๊ฐ → ๋งคํฌ๋ก ์์
- const ์๋ฃํ ๊ธฐํธ์์์ด๋ฆ = ๊ฐ → ์์ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ, ๋ฐฐ์ด์์๋ ์ฌ์ฉ ๋ถ๊ฐ
9. ๊ฐ์ ์ฐธ์กฐ
- ap[1][0] ์ด๋ *(ap[1])์๋ฏธ๊ฐ ๊ฐ์
- ๊ทธ๋๊น, ๊ทธ๋ฅ *()์ ์๋ฏธ๊ฐ [0]์ด๋ ๊ฐ๊ณ , ๋ํ๊ฑฐ๋ ๋นผ๋ ์ง ๊ทธ๋ฐ๊ฑด ๋น์ทํ๊ฒจ
- *( *( ap + i ) + j ) = ap[ i ][ j ]
10. ํฌ์ธํฐ, ํฌ์ธํฐ ๋ฐฐ์ด, ๋ฐฐ์ด ํฌ์ธํฐ
- ํฌ์ธํฐ : int *ap;
- ํฌ์ธํฐ ๋ฐฐ์ด : int *ap[3]; → ๊ทธ๋ฅ ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ํฌ์ธํฐ๋ค์ ํ ๋ฐฐ์ด๋ก ๋ฌถ์๊ฒจ ( ๊ฐ๋ณ์ )
- ๋ฐฐ์ด ํฌ์ธํฐ : int (*ap)[3]; → ํน์ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ ( ๊ฐ์ ์ฑ์ง )
11. ํฌ์ธํฐ ๋ฐฐ์ด๊ณผ ๋ฐฐ์ด ํฌ์ธํฐ์ ์ฐจ์ด
- ๋ฌธ์์ด ์ ์ฅ ์ธก๋ฉด์์ ํฌ์ธํฐ ๋ฐฐ์ด์ ๊ฒฝ์ฐ, ๊ธธ์ด์ ์๊ด X ( ๋ฐ๋ก ๋ฌธ์์ด์ด ์ ์ฅ๋ ๊ณณ์ ์ง์ )
12. ์ด์คํฌ์ธํฐ
- ํฌ์ธํฐ ๋ณ์์ ํฌ์ธํฐ
- ์ฐธ์กฐ ์ฐ์ฐ์๋ฅผ ๋ ๋ฒ ์ฌ์ฉํด์ ์ ์
13. ํจ์ํฌ์ธํฐ
- ๋ณ์ ๋ฟ๋ง ์๋๋ผ, ํจ์ ๋ํ ์ฃผ์๊ฐ ์์ - ๊ทธ๋ฅ ํจ์ ์ด๋ฆ๋ง ์ ์ ๊ฒฝ์ฐ์ ํจ์์ ์ฃผ์๊ฐ์ด ์ ๋ฌ๋จ.
- ํจ์ ํฌ์ธํฐ : (*p)(void) ์ ๊ฐ์ด ๋ค์ void๊ฐ ๋ค์ด๊ฐ / ๋ฐํํ (*ํจ์ํฌ์ธํฐ ์ด๋ฆ) (๋งค๊ฐ๋ณ์1์๋ฃํ, …);
14. ์ ๋ฆฌ
- int *ap; → ํฌ์ธํฐ
- int *ap[3]; → ํฌ์ธํฐ ๋ฐฐ์ด
- int (*ap)[3]; → ๋ฐฐ์ด ํฌ์ธํฐ
- int (*p)(void); → ํจ์ ํฌ์ธํฐ
๋ฐ์ํ