๊ณ„๋ž€์†Œ๋…„ 2024. 11. 4. 13:44

1. ํฌ์ธํ„ฐ

 

  • ์ •์˜: ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜๋กœ, ์‹คํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ์ž„์˜ ์ฃผ์†Œ์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
  • ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค์˜ ์›ํ•˜๋Š” ์˜์—ญ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

ํฌ์ธํ„ฐ ์ž๋ฃŒํ˜•

  • ์ข…๋ฅ˜: ํฌ์ธํ„ฐ ๋ณ€์ˆ˜, ๋ฐฐ์—ด ํฌ์ธํ„ฐ, ํฌ์ธํ„ฐ ๋ฐฐ์—ด, ํ•จ์ˆ˜ ํฌ์ธํ„ฐ, ๋‹ค์ค‘ ํฌ์ธํ„ฐ, voidํ˜• ํฌ์ธ
    • ํฌ์ธํ„ฐ ๋ณ€์ˆ˜: ๋‹ค๋ฅธ ๋ณ€์ˆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜
    • ๋ฐฐ์—ด ํฌ์ธํ„ฐ: ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ ex) int (*arrPtr)[10]; (10๊ฐœ์˜ ์ •์ˆ˜๋ฅผ ๊ฐ€์ง„ ๋ฐฐ์—ด์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ)
    • ํฌ์ธํ„ฐ ๋ฐฐ์—ด: ํฌ์ธํ„ฐ๋ฅผ ์š”์†Œ๋กœ ๊ฐ€์ง€๋Š” ๋ฐฐ์—ด ex) int *ptrArray[10]; (์ •์ˆ˜ํ˜• ํฌ์ธํ„ฐ 10๊ฐœ๋ฅผ ๊ฐ€์ง„ ๋ฐฐ์—ด)
    • ํ•จ์ˆ˜ ํฌ์ธํ„ฐ: ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ ex) void (*funcPtr)(int); (์ •์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜ ํฌ์ธํ„ฐ)
    • ๋‹ค์ค‘ ํฌ์ธํ„ฐ: ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ ex) int **pp; (์ •์ˆ˜ํ˜• ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ)
    • voidํ˜• ํฌ์ธํ„ฐ: ํŠน์ • ์ž๋ฃŒํ˜•์— ์ข…์†๋˜์ง€ ์•Š๋Š” ํฌ์ธํ„ฐ ex) void *vp

 

ํฌ์ธํ„ฐ ๋ณ€์ˆ˜

*๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์„ ์–ธ

์ž๋ฃŒํ˜• *๋ณ€์ˆ˜์ด๋ฆ„;
ex) int *ip; (์ •์ˆ˜ํ˜• ํฌ์ธํ„ฐ)
ex) char *cp; (๋ฌธ์žํ˜• ํฌ์ธํ„ฐ)
ex) double *dp; (์‹ค์ˆ˜ํ˜• ํฌ์ธํ„ฐ)
  • &(์ฃผ์†Œ์—ฐ์‚ฐ์ž): ๋ณ€์ˆ˜์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ฐ์‚ฐ์ž
  • *(ํฌ์ธํ„ฐ์—ฐ์‚ฐ์ž): ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ์˜ ๋‚ด์šฉ์„ ์ฐธ์กฐํ•˜๋Š” ์—ฐ์‚ฐ์ž
#include <stdio.h>

int main() {
    int var = 20;        // ์ผ๋ฐ˜ ๋ณ€์ˆ˜
    int *ptr;           // ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ ์„ ์–ธ

    ptr = &var;         // var์˜ ์ฃผ์†Œ๋ฅผ ptr์— ์ €์žฅ

    printf("var์˜ ๊ฐ’: %d\n", var);           // 20
    printf("var์˜ ์ฃผ์†Œ: %p\n", (void*)&var); // var์˜ ์ฃผ์†Œ
    printf("ptr์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’: %d\n", *ptr); // 20
    printf("ptr์˜ ์ฃผ์†Œ: %p\n", (void*)ptr);  // var์˜ ์ฃผ์†Œ์™€ ๋™์ผ

    return 0;
}
  ๋ณ€์ˆ˜ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜
์„ ์–ธ double num; double *ptr;
๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น 8 4 (32bit ์šด์˜์ฒด์ œ)
์ €์žฅ ์‹ค์ˆ˜ํ˜• ๋ฐ์ดํ„ฐ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ
๊ฐ’ ์ ‘๊ทผ num, ๋ณ€์ˆ˜๋ช… ์‚ฌ์šฉ *ptr, ์ €์žฅ๋œ ์ฃผ์†Œ ๊ฐ’ ์ฐธ์กฐ
๊ฐ’ ์ ‘๊ทผ๋ฐฉ์‹ ์ง์ ‘์ ‘๊ทผ ๊ฐ„์ ‘์ ‘๊ทผ

 

ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์‹œ ๊ทœ์น™

  • *๋ณ€์ˆ˜๋ช…์œผ๋กœ ์„ ์–ธํ•˜์—ฌ ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์ž„์„ ์•Œ๋ฆผ
  • ์ž๋ฃŒํ˜•์€ ์ฐธ์กฐํ•  ์ž๋ฃŒํ˜•๊ณผ ๊ฐ™์•„์•ผ ํ•œ๋‹ค. -> ๋ฏธ์ค€์ˆ˜ ์‹œ ๋ฐ์ดํ„ฐ ์ฐธ์กฐ ์˜ค๋ฅ˜
  • ์‹คํ–‰์‹œ ์ฃผ์†Œ๋ฅผ ๋Œ€์ž…๋ฐ›์•„์•ผํ•ด์„œ & ์—ฐ์‚ฐ์ž ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ ์ฃผ์†Œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • *๋ณ€์ˆ˜๋ช…์€ ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์ž๋กœ ์ž์‹ ์ด ๋ณด๊ด€ํ•˜๊ณ  ์žˆ๋Š” ์ฃผ์†Œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผ(๊ฐ„์ ‘์ฐธ์กฐ)
  • ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์€ ์„ ์–ธ๋˜๋Š” ์ž๋ฃŒํ˜•๊ณผ ์ƒ๊ด€์—†์ด ์šด์˜์ฒด์ œ์— ๋”ฐ๋ผ ํฌ๊ธฐ ๊ฒฐ์ • (32bit ์šด์˜์ฒด์ œ -> 4Byte)

 

*์˜ ์šฉ๋„

  1. ํฌ์ธํŠธ ์„ ์–ธ
  2. ํ•ด๋‹น ์ฃผ์†Œ์— ๊ฐ’์ด ์ ‘๊ทผํ•˜๋Š” ์šฉ๋„
#include <stdio.h>

// ์Šค์™‘ ํ•จ์ˆ˜ ์ •์˜
void swap(int *a, int *b) {
    int temp; 
    temp = *a; // a๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’ ์ €์žฅ
    *a = *b;   // b๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์„ a์— ์ €์žฅ
    *b = temp; // temp์— ์ €์žฅ๋œ ๊ฐ’์„ b์— ์ €์žฅ
}

int main() {
    int x = 5; 
    int y = 10; 
    printf("์Šค์™‘ ์ „: x = %d, y = %d\n", x, y);

    swap(&x, &y);  //x์˜ ์ฃผ์†Œ์™€ y์˜ ์ฃผ์†Œ
    printf("์Šค์™‘ ํ›„: x = %d, y = %d\n", x, y);

    return 0;
}

 

2. ํฌ์ธํ„ฐ ์—ฐ์‚ฐ

  • ์ •์˜: ์ฃผ์†Œ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์—ฐ์‚ฐ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ
  • ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜, ํฌ์ธํ„ฐ์˜ ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ค๊ฑฐ๋‚˜ ๊ฐ์†Œ์‹œํ‚ค๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰
  • ํŠน์ง•
    • ์ฃผ์†Œ ์ฆ๊ฐ€: ํฌ์ธํ„ฐ์— ์ •์ˆ˜๋ฅผ ๋”ํ•˜๋ฉด, ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ๊ฐ€ ํ•ด๋‹น ์ž๋ฃŒํ˜•์˜ ํฌ๊ธฐ๋งŒํผ ์ฆ๊ฐ€
      • ex) int *p; p++๋Š” p๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ๋ฅผ 4๋ฐ”์ดํŠธ(์ •์ˆ˜ํ˜•์˜ ํฌ๊ธฐ) ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
    • ํฌ์ธํ„ฐ ๊ฐ„์˜ ์—ฐ์‚ฐ: ๋‘ ํฌ์ธํ„ฐ ๊ฐ„์˜ ๋บ„์…ˆ์„ ํ†ตํ•ด ๋‘ ํฌ์ธํ„ฐ ๊ฐ„์˜ ๊ฑฐ๋ฆฌ(์š”์†Œ ๊ฐœ์ˆ˜)๋ฅผ ๊ตฌํ•จ
    • ๋ฐฐ์—ด์˜ ์š”์†Œ์— ์ ‘๊ทผ ์‹œ ์ฃผ๋กœ ์‚ฌ์šฉ

 

3. ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ

  • ๋ฐฐ์—ด ๋ณ€์ˆ˜๋Š” ๋ฐฐ์—ด์ด ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ด๋ฅผ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์— ๋Œ€์ž…๊ฐ€๋Šฅ
  • ptr์€ count ๋ฐฐ์—ด์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ, *(ptr + 1)์€ ๋‘ ๋ฒˆ์งธ ์š”์†Œ์ธ 200์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
#include <stdio.h>

int main() {
    int count[6] = {100, 200, 300, 400, 500}; // ๋ฐฐ์—ด ์„ ์–ธ
    int *ptr; // ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ ์„ ์–ธ

    ptr = count; // ๋ฐฐ์—ด์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ํฌ์ธํ„ฐ์— ๋Œ€์ž…

    printf("%d\n", *(ptr + 1)); // 200 ์ถœ๋ ฅ
    return 0;
}

 

  • ๋ฐฐ์—ด๋ณ€์ˆ˜์™€ ํฌ์ธํ„ฐ ์ƒ์ˆ˜

๋ฐฐ์—ด ๋ณ€์ˆ˜๋Š” ํฌ์ธํ„ฐ ์ƒ์ˆ˜๋กœ ์ทจ๊ธ‰๋˜๋ฉฐ, ๋ฐฐ์—ด์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. 

count++; // ์˜ค๋ฅ˜: ๋ฐฐ์—ด ๋ณ€์ˆ˜๋Š” ์ƒ์ˆ˜์ด๋ฏ€๋กœ ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Œ

 

  • ํฌ์ธํ„ฐ์™€ ๋ฌธ์ž์—ด

๋ฌธ์ž์—ด ์ƒ์ˆ˜: ๋ฌธ์ž์—ด ์ฃผ์†Œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜

๋ฌธ์ž์—ด ์ƒ์ˆ˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ํŠน์ • ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ๋ฌธ์ž์—ด์„ ํฌ์ธํ„ฐ๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.(๋ฌธ์ž์—ด ์ƒ์ˆ˜ ํฌ์ธํ„ฐ)

#include <stdio.h>

int main() {
    char *ptr = "ABC"; // ๋ฌธ์ž์—ด ์ƒ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ
    printf("%s\n", ptr); // ~ ์ถœ๋ ฅ
    return 0;
}

 

 

4. ํฌ์ธํ„ฐ ์ „๋‹ฌ๊ณผ ๋ฐ˜ํ™˜

 

์ธ์ˆ˜ ์ „๋‹ฌ ๋ฐฉ๋ฒ•

  • ๊ฐ’์— ์˜ํ•œ ํ˜ธ์ถœ (Call by Value): ํ•จ์ˆ˜์— ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ๋•Œ, ์ธ์ˆ˜์˜ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋จ. ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ธ์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„ ์›๋ž˜์˜ ๊ฐ’์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Œ
  • ์ฐธ์กฐ์— ์˜ํ•œ ํ˜ธ์ถœ (Call by Reference): ํ•จ์ˆ˜์— ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ๋•Œ, ์ธ์ˆ˜์˜ ์ฃผ์†Œ๊ฐ€ ์ „๋‹ฌ. ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ธ์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์›๋ž˜์˜ ๊ฐ’๋„ ๋ณ€๊ฒฝ๋˜๋ฉฐ, ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฐธ์กฐ์— ์˜ํ•œ ํ˜ธ์ถœ์„ ๊ตฌํ˜„

๋ฐฐ์—ด์ „๋‹ฌ

  • ๋ฐฐ์—ด์„ ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ๋ฐฐ์—ด์€ ๋ฐฐ์—ด ์ „์ฒด๊ฐ€ ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋˜๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฐฐ์—ด์˜ ์‹œ์ž‘์ฃผ์†Œ๋งŒ์ด ์ „๋‹ฌ๋œ๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋ฐฐ์—ด์„ ๋ฐ›์„ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํฌ์ธํ„ฐ๋กœ ์„ ์–ธ๋˜์–ด์•ผ ํ•œ๋‹ค.
#include <stdio.h>

void modifyArray(int *arr, int size) {
    for (int i = 0; i < size; i++) {
        arr[i] += 1; // ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ 1 ์ฆ๊ฐ€
    }
}

int main() {
    int count[5] = {1, 2, 3, 4, 5};
    modifyArray(count, 5); // ๋ฐฐ์—ด์˜ ์‹œ์ž‘ ์ฃผ์†Œ ์ „๋‹ฌ
    for (int i = 0; i < 5; i++) {
        printf("%d ", count[i]); // 2 3 4 5 6 ์ถœ๋ ฅ
    }
    return 0;
}

 

 

ํฌ์ธํ„ฐ ๋ฐ˜ํ™˜

๋ถ€๋ชจํ•จ์ˆ˜์— ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ ํ•จ์ˆ˜์›ํ˜•์—์„œ ํ•จ์ˆ˜๋ช… ์•ž์— ํฌ์ธํ„ฐ ์ž๋ฃŒํ˜•์„ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค.

 

const ์ง€์ •์ž

  • const ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜๋ฅผ ์ƒ์ˆ˜ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๊ฑฐ๋‚˜ ํŠน์ • ๋ณ€์ˆ˜ ์ „์šฉ ํฌ์ธํ„ฐ๋ฅผ ๋งŒ๋“ค ๋•Œ ์œ ์šฉํ•˜๋‹ค.

 

  • ์ฝ๊ธฐ ์ „์šฉ ํฌ์ธํ„ฐ: ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
#include <stdio.h>

void printValue(const int *ptr) {
    // *ptr = 10; // ์˜ค๋ฅ˜: ์ฝ๊ธฐ ์ „์šฉ ํฌ์ธํ„ฐ๋กœ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Œ
    printf("%d\n", *ptr); // ๊ฐ’ ์ถœ๋ ฅ
}

int main() {
    int value = 5;
    const int *ptr = &value; // ์ฝ๊ธฐ ์ „์šฉ ํฌ์ธํ„ฐ
    printValue(ptr);
    return 0;
}

 

 

  • ํŠน์ • ๋ณ€์ˆ˜์˜ ์ „์šฉ ํฌ์ธํ„ฐ: ํฌ์ธํ„ฐ ์ž์‹ ์˜ ๊ฐ’(ํฌ์ธํ„ฐ์— ์ €์žฅ๋œ ์ฃผ์†Œ)์„ ๋ณ€๊ฒฝํ• ์ˆ˜ ์—†๋‹ค.
#include <stdio.h>

void example() {
    int value = 10;
    int *const ptr = &value; // ํŠน์ • ๋ณ€์ˆ˜ ์ „์šฉ ํฌ์ธํ„ฐ
    // ptr = &anotherValue; // ์˜ค๋ฅ˜: ํฌ์ธํ„ฐ ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Œ
    *ptr = 20; // ๊ฐ’ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
    printf("%d\n", *ptr); // 20 ์ถœ๋ ฅ
}

int main() {
    example();
    return 0;
}

 

  • ์ฝ๊ธฐ ์ „์šฉ ํฌ์ธํ„ฐ์ด๋ฉด์„œ ํŠน์ • ๋ณ€์ˆ˜ ์ „์šฉ ํฌ์ธํ„ฐ: ๋ฐ˜๋“œ์‹œ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•˜๋ฉฐ, ์ดํฌ์ธํ„ฐ๋กœ๋Š” ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’๋„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ณ  ํฌ์ธํ„ฐ ์ž์‹ ์˜ ๊ฐ’(ํฌ์ธํ„ฐ์—์ €์žฅ๋œ ์ฃผ์†Œ)๋„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
#include <stdio.h>

void example() {
    int value = 10;
    const int *const ptr = &value; // ์ฝ๊ธฐ ์ „์šฉ์ด๋ฉด์„œ ํŠน์ • ๋ณ€์ˆ˜ ์ „์šฉ ํฌ์ธํ„ฐ
    // *ptr = 20; // ์˜ค๋ฅ˜: ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Œ
    // ptr = &anotherValue; // ์˜ค๋ฅ˜: ํฌ์ธํ„ฐ ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Œ
    printf("%d\n", *ptr); // 10 ์ถœ๋ ฅ
}

int main() {
    example();
    return 0;
}

 

์ •๋ฆฌํ•˜์ž๋ฉด

int *p; ํฌ์ธํ„ฐ ๋ณ€์ˆ˜. ์ฃผ์†Œ๊ฐ’ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ, ๊ฐ’ ๋ณ€๊ฒฝ O

const int *p; ์ฝ๊ธฐ ์ „์šฉ ํฌ์ธํ„ฐ. ์ฃผ์†Œ๊ฐ’ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ, ๊ฐ’ ๋ณ€๊ฒฝ X

int* const p; ํŠน์ • ๋ณ€์ˆ˜ ์ „์šฉ ํฌ์ธํ„ฐ. ์ฃผ์†Œ๊ฐ’ ๋ณ€๊ฒฝ X, ๊ฐ’ ๋ณ€๊ฒฝ O

const int* const p; ์ฝ๊ธฐ ์ „์šฉ& ํŠน์ • ๋ณ€์ˆ˜ ์ „์šฉ ํฌ์ธํ„ฐ. ์ฃผ์†Œ๊ฐ’ ๋ณ€๊ฒฝ X, ๊ฐ’ ๋ณ€๊ฒฝ X