1. ํฌ์ธํฐ
- ํฌ์ธํฐ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๋ณ์๋ก, ์ผ๋ฐ ๋ณ์๋ ๊ฐ์ ์ ์ฅํ์ง๋ง, ํฌ์ธํฐ๋ ํด๋น ๊ฐ์ด ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅ
- ์ฃผ์ ์ฐ์ฐ์: &
int a = 10;
int *pa = &a; // ๋ณ์ a์ ์ฃผ์๋ฅผ ํฌ์ธํฐ pa์ ์ ์ฅ
2. ์ฃผ์ ์ถ๋ ฅ
- ์ฃผ์๋ฅผ ์ถ๋ ฅํ ๋๋ ํฌ์ธํฐ ์ ์ฉ ํ์ ์ง์ ์ %p๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฉฐ, ์ด๋ 16์ง์๋ก ์ถ๋ ฅ
printf("%p\n", &a); // a์ ์ฃผ์๋ฅผ 16์ง์๋ก ์ถ๋ ฅ
- 10์ง์๋ก ์ถ๋ ฅํ๋ ค๋ฉด %u ํ์ ์ง์ ์๋ฅผ ์ฌ์ฉ
printf("%u\n", (unsigned int)&a); // ์ฃผ์๋ฅผ 10์ง์๋ก ์ถ๋ ฅ
3. ํฌ์ธํฐ์ ๊ฐ์ ์ฐธ์กฐ ์ฐ์ฐ์: *
- ํฌ์ธํฐ ๋ณ์๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ ์ฐธ์กฐํ๋ ค๋ฉด, ๊ฐ์ ์ฐธ์กฐ ์ฐ์ฐ์ *๋ฅผ ์ฌ์ฉ
- ํฌ์ธํฐ pa๊ฐ ๊ฐ๋ฆฌํค๋ ๋ณ์ a๋, *pa๋ก ๊ฐ์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ pa = &a์ &*pa = pa๋ ๋์ผํ ์๋ฏธ
- ์ฆ, *pa = a -> &a = &*pa = pa
int a = 10;
int *pa = &a; // a์ ์ฃผ์๋ฅผ pa์ ์ ์ฅ
printf("%d\n", *pa); // ํฌ์ธํฐ pa๊ฐ ๊ฐ๋ฆฌํค๋ a์ ๊ฐ ์ถ๋ ฅ (10)
*pa = 20; // a์ ๊ฐ์ 20์ผ๋ก ๋ณ๊ฒฝ
4. scanf์์ ํฌ์ธํฐ
- scanf ํจ์์์ ์ ๋ ฅ๋ฐ์ ๋, ๋ณ์๊ฐ ์ ์ฅ๋ ์ฃผ์๋ฅผ ์ ๊ณตํด์ผ ํ๋ค.
int a;
scanf("%d", &a); // ๋ณ์ a์ ์ฃผ์์ ๊ฐ์ ์ ์ฅ
5. ํฌ์ธํฐ์ ๋์
- ํฌ์ธํฐ๋ผ๋ฆฌ ๊ฐ์ ๋์ ํ ๋, ๋์ผํ ์๋ฃํ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ผ๋ฆฌ๋ง ๊ฐ๋ฅ
int a = 10, b = 20;
int *pa = &a, *pb = &b;
pa = pb; // pa์ pb๋ ๋ชจ๋ intํ ํฌ์ธํฐ์ด๋ฏ๋ก ๋์
๊ฐ๋ฅ
6. const ์์ฝ์ด๋ฅผ ์ฌ์ฉํ ํฌ์ธํฐ
- const ์์ฝ์ด๋ฅผ ์ฌ์ฉํ์ฌ ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋๋ก ํ ์ ์๋ค.
- ์ด๋ ํฌ์ธํฐ๋ฅผ ํตํ ๊ฐ์ ์ฐธ์กฐ๋ก ๊ฐ์ ๋ฐ๊ฟ ์ ์๋ค๋ ์๋ฏธ
const int *pa = &a; // pa๋ฅผ ํตํด a์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์
*pa = 20; // ์ค๋ฅ ๋ฐ์
๋ณ์ a๋ ์ง์ ๋ณ๊ฒฝํ ์ ์์ง๋ง, ํฌ์ธํฐ pa๋ฅผ ํตํด์๋ ๋ณ๊ฒฝํ ์ ์๋ค.
7. ์ฃผ์์ ํฌ์ธํฐ์ ์ฐจ์ด
- ์ฃผ์๋ ์์์ด๊ณ , ํฌ์ธํฐ๋ ๋ณ์์ ๊ฐ๋ค.
- ์ด๋ฅผ ํตํด ๋ ํฌ์ธํฐ๊ฐ ํ๋์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํฌ ์ ์๋ค.
8. ํฌ์ธํฐ์ ์ฃผ์์ ํฌ๊ธฐ
- ๋ชจ๋ ํฌ์ธํฐ๋ ๊ฐ๋ฆฌํค๋ ์๋ฃํ์ ๊ด๊ณ์์ด ํฌ๊ธฐ๊ฐ ๋์ผ
int *p1;
char *p2;
double *p3;
printf("%lu\n", sizeof(p1)); // ์ถ๋ ฅ: 8
printf("%lu\n", sizeof(p2)); // ์ถ๋ ฅ: 8
printf("%lu\n", sizeof(p3)); // ์ถ๋ ฅ: 8
9. ํฌ์ธํฐ์ ๋์ ๊ท์น
1. ๊ฐ์ ์๋ฃํ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ผ๋ฆฌ๋ง ๋์ ๊ฐ๋ฅ
2. ํ ๋ณํ์ ํตํด ๋ค๋ฅธ ์๋ฃํ ํฌ์ธํฐ๋ ๋์ ๊ฐ๋ฅ
int a = 10;
double b = 20.0;
int *p1 = &a;
double *p2 = &b;
p1 = (int *)p2; // ํ ๋ณํ์ ํตํด ๋ค๋ฅธ ์๋ฃํ ํฌ์ธํฐ๋ ๋์
๊ฐ๋ฅ
10. ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ํฌ์ธํฐ๋ ํจ์์์ ๋ ๋ณ์์ ๊ฐ์ ๊ตํ(swap) ํ ๋ ์ ์ฉ
- ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ํจ์ ๋ด์์ ๋ณ์์ ๊ฐ์ด ์ ๋๋ก ๋ฐ๋์ง ์๋๋ค.
void swap(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
}
int main() {
int a = 10, b = 20;
swap(&a, &b); // a์ b์ ์ฃผ์๋ฅผ ์ ๋ฌํ์ฌ ๊ฐ์ ๊ตํ
printf("%d %d", a, b); // ์ถ๋ ฅ: 20 10
}
- ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ๋ณ์์ ๊ฐ์ ๊ตํํ๋ ค๋ฉด, ํจ์์ ๊ฐ์ ์ง์ ์ ๋ฌํด์ผ ํ๋ค.
- ๊ทธ๋ฌ๋ C ์ธ์ด์์ ํจ์ ์ธ์๋ ๊ฐ์ ์ํ ํธ์ถ๋ก ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์, ํจ์ ๋ด๋ถ์์ ๋ณ์์ ๋ณต์ฌ๋ณธ์ ์ฌ์ฉํ๊ฒ ๋๊ณ , ๋ฐ๋ผ์ ํจ์ ๋ด๋ถ์์ ๊ฐ์ ๋ณ๊ฒฝํด๋ ์๋ ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝ๋์ง ์๋๋ค.
void swap(int x, int y) {
int temp = x;
x = y;
y = temp;
}
int main() {
int a = 10, b = 20;
swap(a, b); // ๊ฐ๋ง ์ ๋ฌ
printf("%d %d", a, b); // ์ถ๋ ฅ: 10 20 (๊ฐ์ด ๋ฐ๋์ง ์์)
}
'๐ปโโ๏ธ์ ๊ณต๊ณต๋ถ > C์ธ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
10. ๋ฐฐ์ด๊ณผ ๋ฌธ์์ด (1) | 2024.10.21 |
---|---|
9. ๊ธฐ์ต ํด๋์ค (0) | 2024.10.14 |
8. ๋ฐฐ์ด (0) | 2024.09.10 |
7. ํจ์ (0) | 2024.09.10 |
6. ๋ฐ๋ณต๋ฌธ (0) | 2024.09.05 |