๊ณ„๋ž€์†Œ๋…„ 2024. 9. 10. 20:43

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 (๊ฐ’์ด ๋ฐ”๋€Œ์ง€ ์•Š์Œ)
}