C์–ธ์–ด

[C์–ธ์–ด] ๋ฐฐ์—ด ์ด๋ฆ„์„ ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ, *ํฌ์ธํ„ฐ๋ฅผ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ธฐ

hyonie 2024. 12. 30. 18:22

์ด์ „์— ๊ณต๋ถ€ํ–ˆ๋˜ C์–ธ์–ด์—์„œ ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ์— ๋Œ€ํ•œ ์ฃผ์ œ๋กœ ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์˜ ๊ด€๊ณ„์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 


๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ์˜ ๊ด€๊ณ„

C์–ธ์–ด๋ฅผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋ฉด "๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ์˜ ๊ด€๊ณ„" ๊ฐ€ ์ž์ฃผ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ์ด๋ฆ„์ด ํฌ์ธํ„ฐ์™€ ๊ฐ™๋‹ค๊ณ ๋„ ํ•˜๊ณ , ๋˜ ๋ฐฐ์—ด์˜ ์ด๋ฆ„์€ ์ƒ์ˆ˜๋ผ์„œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. 

๊ทธ๋ ‡๋‹ค๋ฉด, ๋ฐฐ์—ด์˜ ์ด๋ฆ„์€ ์ •๋ง ํฌ์ธํ„ฐ์ผ๊นŒ์š”? ์•„๋‹ˆ๋ฉด ๋‹จ์ˆœํžˆ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋˜ ๋‹ค๋ฅธ ๊ฐœ๋…์ผ๊นŒ์š”?

์ด ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต์„ ์ฐพ์•„๋ณด๋ฉฐ, ๋ฐฐ์—ด ์ด๋ฆ„์˜ ์˜๋ฏธ์™€ ๋ฐฐ์—ด ์ด๋ฆ„์„ ํฌ์ธํ„ฐ ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 


1. ๋ฐฐ์—ด ์ด๋ฆ„์˜ ์˜๋ฏธ 

 

๋ฐฐ์—ด์€ ๊ฐ™์€ ์ž๋ฃŒํ˜•์˜ ๋ณ€์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ์ด๋ฆ„์€ ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ์ ์—์„œ ์ค‘์š”ํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ฐฐ์—ด์˜ ์ด๋ฆ„์€ ๋ฐฐ์—ด์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒ์ˆ˜ ํฌ์ธํ„ฐ ์ž…๋‹ˆ๋‹ค.

 

์ฝ”๋“œ ์˜ˆ์ œ

#include <stdio.h>

int main(void)
{
    int arr[] = { 1,2,3,4,5 };
    int i;

    printf("๋ฐฐ์—ด์˜ ์š”์†Œ ์ถœ๋ ฅ: ");

    for (i = 0; i < 5; i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n\n");

    printf("๋ฐฐ์—ด์˜ ์ฃผ์†Œ ์ถœ๋ ฅ: ");
    for (i=0; i<5; i++)
    {
        printf("%d ", &arr[i]);
    }
    printf("\n\n");

    printf("๋ฐฐ์—ด์˜ ์ด๋ฆ„ ์ถœ๋ ฅ: %d\n", arr);

    return 0;

}

 

 

๊ทธ๋Ÿผ ์—ฌ๊ธฐ์„œ ๋ฐฐ์—ด์˜ ์ด๋ฆ„์ด ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์ฃผ์†Œ๊ฐ’๊ณผ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์˜ ์˜๋ฏธ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

๐Ÿ’ก ๊ฒฐ๊ณผ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์‹ค

  1. ๋ฐฐ์—ด์˜ ์ด๋ฆ„์€ ๋ฐฐ์—ด์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.
    • arr == &arr[0]
    • ๋ฐฐ์—ด์˜ ์ด๋ฆ„ arr์€ &arr[0]์™€ ๋™์ผํ•œ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
    • ๋‹ค์‹œ ์ •๋ฆฌํ•˜์ž๋ฉด, ๋ฐฐ์—ด์˜ ์ด๋ฆ„์€ ๋ฐฐ์—ด ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹œ์ž‘์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ฆ‰, ๋ฐฐ์—ด์ด๋ฆ„ arr๋Š” &arr[0]๊ณผ ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.
  2. ๋ฐฐ์—ด ์ด๋ฆ„์€ ์ƒ์ˆ˜ ํฌ์ธํ„ฐ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฐฐ์—ด์˜ ์ด๋ฆ„์€ ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜์ง€๋งŒ, ์ƒ์ˆ˜๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, arr๋Š” ๋ฐฐ์—ด์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋ฐฐ์—ด์˜ ๋‹ค๋ฅธ ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํ•˜์ง€๋งŒ ์ผ๋ฐ˜ ํฌ์ธํ„ฐ์™€ ๋‹ฌ๋ฆฌ, ๋ฐฐ์—ด ์ด๋ฆ„์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.


  3. ๋ฐฐ์—ด ์ด๋ฆ„์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ๋ฐฐ์—ด ์ด๋ฆ„์€ ํฌ์ธํ„ฐ์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฐ์—ด ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

๐Ÿ”Ž ์ผ๋ฐ˜ ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด ์ด๋ฆ„์˜ ์ฐจ์ด

2๋ฒˆ์—์„œ๋„ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋ฐฐ์—ด์˜ ์ด๋ฆ„์€ ๋ฐฐ์—ด์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์—ญํ• ์„ ํ•˜์ง€๋งŒ, ์ผ๋ฐ˜์ ์ธ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์™€๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ์ด๋ฆ„์€ ์ƒ์ˆ˜ ํฌ์ธํ„ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์ฃผ์†Œ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

๋ฐฐ์—ด ์ด๋ฆ„์€ ์ƒ์ˆ˜ ์ด๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

#include <stdio.h>

int main(void)
{
    int arr[] = {1, 2, 3, 4, 5};
    int temp = 10;

    arr = &temp; // ์˜ค๋ฅ˜ ๋ฐœ์ƒ: ๋ฐฐ์—ด ์ด๋ฆ„์€ ์ƒ์ˆ˜์ด๋ฏ€๋กœ ์ฃผ์†Œ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Œ
    return 0;
}

 

 

๊ฒฐ๋ก ์ ์œผ๋กœ

๋ฐฐ์—ด์˜ ์ด๋ฆ„์ด ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์˜ ์ฃผ์†Œ๊ฐ’๊ณผ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์€ ๋ฐฐ์—ด ์ด๋ฆ„์ด ๋ฐฐ์—ด์˜ ๋ฉ”๋ชจ๋ฆฌ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐฐ์—ด ์ด๋ฆ„ ์ž์ฒด๋Š” ์ƒ์ˆ˜ ํฌ์ธํ„ฐ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๊ฐ’์„ ๋Œ€์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ์ ์—์„œ ๋ฐฐ์—ด ์ด๋ฆ„์€ ํฌ์ธํ„ฐ์™€ ๋น„์Šทํ•˜์ง€๋งŒ, ๋™์‹œ์— ์ค‘์š”ํ•œ ์ฐจ์ด์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 


 

2. ๋ฐฐ์—ด ์ด๋ฆ„์„ ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ธฐ 

 

๋ฐฐ์—ด ์ด๋ฆ„์ด ํฌ์ธํ„ฐ ์—ญํ• ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๋ฐฐ์—ด์˜ ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฝ”๋“œ ์˜ˆ์ œ

#include <stdio.h>

int main(void)
{
    int arr[] = {1, 2, 3, 4, 5};

    printf("๋ฐฐ์—ด์˜ ์š”์†Œ ์ถœ๋ ฅ: ");
    for (int i = 0; i < 5; i++) {
        printf("%d ", arr[i]);  // ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด ์ ‘๊ทผ
    }
    printf("\n");

    printf("ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์œผ๋กœ ๋ฐฐ์—ด์˜ ์š”์†Œ ์ถœ๋ ฅ: ");
    for (int i = 0; i < 5; i++) {
        printf("%d ", *(arr + i));  // ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์„ ์ด์šฉํ•œ ๋ฐฐ์—ด ์ ‘๊ทผ
    }
    printf("\n");

    printf("arr + 1์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’: %d\n", *(arr + 1));  // arr + 1์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ์˜ ๊ฐ’์€ 2
    return 0;
}

 

๐Ÿ’ก ๊ฒฐ๊ณผ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์‹ค

arr์€ ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์˜ ์ฃผ์†Œ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋ฏ€๋กœ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ๋‹ค์Œ ์ฃผ์†Œ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

  1. ๋ฐฐ์—ด์˜ ์ด๋ฆ„์€ ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, *(arr + i)๋กœ ๋ฐฐ์—ด์˜ ์š”์†Œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  2. arr[i] ์™€ *(arr + i)๋Š” ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฐฐ์—ด์˜ ์ด๋ฆ„์„ ํ†ตํ•ด ์ฃผ์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒ๋Œ€์ ์ธ ์œ„์น˜์— ์žˆ๋Š” ์š”์†Œ์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ฒฐ๋ก ์ ์œผ๋กœ

๋ฐฐ์—ด์˜ ์ด๋ฆ„์€ ์ƒ์ˆ˜ ํฌ์ธํ„ฐ๋กœ์„œ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์˜ ์ฃผ์†Œ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๊ณ , ๋ฐฐ์—ด์˜ ์ด๋ฆ„์„ ํ†ตํ•ด ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ์— ์ ‘๊ทผ ํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ๋„ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋ฐฐ์—ด ์ด๋ฆ„๊ณผ ์ผ๋ฐ˜ ํฌ์ธํ„ฐ์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด๋Š” ๋ฐฐ์—ด ์ด๋ฆ„์€ ์ฃผ์†Œ๊ฐ’ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€ํ•˜๋Š” ์ ์ž…๋‹ˆ๋‹ค.

 


 

2.1 ์—ฌ๊ธฐ์„œ ๊ถ๊ธˆ์ฆ ํ•ด๊ฒฐ: ์ฃผ์†Œ๊ฐ’ ์ถœ๋ ฅ ์‹œ ์Œ์ˆ˜(-)๊ฐ€ ๋‚˜์˜ค๋Š” ์ด์œ ?

๋ฐฐ์—ด ์š”์†Œ๊ฐ€ int ์™€ ๊ฐ™์€ ์ •์ˆ˜ํ˜•์ผ๋•Œ, ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋Š” ๊ฐ ์š”์†Œ์˜ ํฌ๊ธฐ(์˜ˆ: 4๋ฐ”์ดํŠธ) ๋งŒํผ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ถœ๋ ฅ๋˜๋Š” ์ฃผ์†Œ๊ฐ’์ด ํŠน์ • ๋ฒ”์œ„๋ฅผ ๋„˜์–ด ์Œ์ˆ˜์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ(Overflow) ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ž€?

์ปดํ“จํ„ฐ์—์„œ ์ฃผ์†Œ๊ฐ’์ด๋‚˜ ์ •์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•˜๊ฒŒ ๋˜๋ฉด, ๊ฐ’์ด ์Œ์ˆ˜๋กœ ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” 2์˜ ๋ณด์ˆ˜ ํ‘œํ˜„์„ ์‚ฌ์šฉํ•˜๋Š” ์ปดํ“จํ„ฐ์˜ ํŠน์„ฑ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

2์˜ ๋ณด์ˆ˜์™€ ๊ฐ’ ๋ณ€ํ™˜๊ณผ์ •

- ์ปดํ“จํ„ฐ๋Š” ๊ฐ’์„ ์ €์žฅํ•  ๋•Œ 2์˜ ๋ณด์ˆ˜ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
- 128์€ 8๋น„ํŠธ์—์„œ 1000 000 ์œผ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ๋ถ€ํ˜ธ ์žˆ๋Š” ์ •์ˆ˜์—์„œ -128์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
- ๋”ฐ๋ผ์„œ, ์ฝ”๋“œ์—์„œ char ch = 128; ์„ ์ €์žฅํ•˜๋ฉด ์‹ค์ œ๋กœ ch์˜ ๊ฐ’์€ -128์ด ๋ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ”Žchar ch = 128;์—์„œ ์ฃผ์†Œ๊ฐ’ ์ถœ๋ ฅ์‹œ ์Œ์ˆ˜๊ฐ’์ด ๋‚˜์˜ค๋Š” ์˜ˆ

C ์–ธ์–ด์—์„œ char ์ž๋ฃŒํ˜•์€ 1๋ฐ”์ดํŠธ(8๋น„ํŠธ) ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๊ฐ’์˜ ๋ฒ”์œ„๋Š” ๋‹ค์Œ ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค:

  1. ๋ถ€ํ˜ธ๊ฐ€ ์žˆ๋Š” signed char: -128 ~ 127
  2. ๋ถ€ํ˜ธ๊ฐ€ ์—†๋Š” unsigned char: 0 ~ 255

 

๐ŸŒ ๋ถ€ํ˜ธ ์žˆ๋Š” char์˜ ๊ฐ’ ๋ฒ”์œ„์™€ ์ˆœํ™˜๊ตฌ์กฐ 

๊ฐ’์ด ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด, ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ์ˆœํ™˜ํ•˜์—ฌ ๋‹ค์‹œ ๋ฐ˜๋Œ€์ชฝ์œผ๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค. +127์—์„œ ํ•œ์นธ ๋” ๊ฐ€๋ฉด -128๋กœ ์ˆœํ™˜


C ์–ธ์–ด์—์„œ ๋ถ€ํ˜ธ ์žˆ๋Š” char ์ž๋ฃŒํ˜•(signed char)์€ ๊ฐ’์˜ ๋ฒ”์œ„๊ฐ€ -128 ~ 127๋กœ ํ•œ์ • ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฒ”์œ„๋Š” ์›ํ˜• ๊ตฌ์กฐ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ๊ทธ๋ฆผ์ฒ˜๋Ÿผ +127์—์„œ ๋‹ค์‹œ -128๋กœ ์ˆœํ™˜๋ฉ๋‹ˆ๋‹ค.

 

 char ch = 128; ์˜ ๋™์ž‘ ์ •๋ฆฌ๋‚ด์šฉ

  1. char ์ž๋ฃŒํ˜•์€ 8๋น„ํŠธ(1๋ฐ”์ดํŠธ)๋กœ, ์ €์žฅ ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„๋Š” -128 ~ 127์ž…๋‹ˆ๋‹ค.
  2. 128์€ ์ด ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•˜๋ฏ€๋กœ, ๊ฐ’์ด ์ˆœํ™˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  3.  +127์—์„œ ๋‹ค์‹œ ๋Œ์˜ค๋ฉด -128์ด ๋ฉ๋‹ˆ๋‹ค.
    • ๊ทธ๋ฆผ์—์„œ ๋ณด์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, 128์€ +127์—์„œ ํ•œ ์นธ ๋” ์ด๋™ํ•˜๋ฉด -128์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

 

 

๊ฒฐ๋ก ์ ์œผ๋กœ

  • char ch = 128; ์€ +127์„ ์ดˆ๊ณผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์›์„ ๋”ฐ๋ผ -128๋กœ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๋Š” ๋ถ€ํ˜ธ ์žˆ๋Š” char ์ž๋ฃŒํ˜•์˜ ๊ฐ’ ๋ฒ”์œ„์™€ ์ˆœํ™˜ ๊ตฌ์กฐ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

์•„ํ•˜, ์—ฌ๊ธฐ์„œ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. 128์ด -128์ด ๋œ ์ด์œ ๋Š”, char ์ž๋ฃŒํ˜•์˜ ๊ฐ’์ด ์›ํ˜•์œผ๋กœ ์ˆœํ™˜๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๋Š” ๊ฒƒ์„ !! ๐Ÿ˜Š

 

3. ํฌ์ธํ„ฐ๋ฅผ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ธฐ 

 

์ด๋ฒˆ์—๋Š” ํฌ์ธํ„ฐ๋ฅผ ๋ฐฐ์—ด์˜ ์ด๋ฆ„์ฒ˜๋Ÿผ...?? ๋ฐฐ์—ด ์ด๋ฆ„์ด ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์˜ ์ฃผ์†Œ๊ฐ’์„ ๋‚˜ํƒ€๋‚ธ๋‹ค๋Š” ์ ์—์„œ, ํฌ์ธํ„ฐ๋„ ๋™์ผํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

๋ฐฐ์—ด์˜ ์ด๋ฆ„์€ ์ƒ์ˆ˜ ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ๋ฐฐ์—ด์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋ฐฐ์—ด ์ด๋ฆ„์„ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•˜๋ฉด ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋„ ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋งˆ์น˜ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฝ”๋“œ ์˜ˆ์ œ

#include <stdio.h>

int main(void)
{
    int arr[] = {1, 2, 3, 4, 5};  // ๋ฐฐ์—ด ์„ ์–ธ
    int *pTemp;                  // ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ ์„ ์–ธ
    int i;

    pTemp = arr;  // ๋ฐฐ์—ด ์ด๋ฆ„์„ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์— ๋Œ€์ž…

    printf("๋ฐฐ์—ด์˜ ์š”์†Œ ์ถœ๋ ฅ: "); // ๋ฐฐ์—ด์˜ ์š”์†Œ ์ถœ๋ ฅ: 1 2 3 4 5
    for (i = 0; i < 5; i++) {
        printf("%d ", pTemp[i]);  // ํฌ์ธํ„ฐ๋ฅผ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์‚ฌ์šฉ
    }
    printf("\n");

    return 0;
}

 

๐Ÿ’ก ๊ฒฐ๊ณผ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์‹ค

 

  1. ํฌ์ธํ„ฐ๋Š” ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํฌ์ธํ„ฐ ๋ณ€์ˆ˜(pTemp)๋ฅผ ๋ฐฐ์—ด ์ด๋ฆ„์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, pTemp[i]๋Š” ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์ธ *(pTemp + i) ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
  2. ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด ์ด๋ฆ„์˜ ์—ญํ• ์€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฐฐ์—ด์˜ ์ด๋ฆ„(arr)์€ ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์˜ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, pTemp = arr;  ์„ ํ†ตํ•ด ๋ฐฐ์—ด์˜ ์ฃผ์†Œ๋ฅผ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ ํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํฌ์ธํ„ฐ๋Š” ์ดํ›„ ๋ฐฐ์—ด ์ด๋ฆ„์ฒ˜๋Ÿผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฐฐ์—ด์˜ ์š”์†Œ ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฐฐ์—ด ์ด๋ฆ„์„ ์‚ฌ์šฉํ•œ ์ ‘๊ทผ: arr[i]
    • ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ ์ ‘๊ทผ: pTemp[i]
    •  ๋‘ ๋ฐฉ์‹ ๋ชจ๋‘ ๋™์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ฐฐ์—ด ์ด๋ฆ„์€ ์ƒ์ˆ˜ ํฌ์ธํ„ฐ, ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋Š” ๊ฐ€๋ณ€ ํฌ์ธํ„ฐ
    • ๋ฐฐ์—ด ์ด๋ฆ„์€ ๊ณ ์ •๋œ ์ƒ์ˆ˜ ํฌ์ธํ„ฐ๋กœ, ๋‹ค๋ฅธ ์ฃผ์†Œ๋ฅผ ๋Œ€์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    • ๋ฐ˜๋ฉด, ํฌ์ธํ„ฐ ๋ณ€์ˆ˜(pTemp)๋Š” ๋‹ค๋ฅธ ๋ฐฐ์—ด์ด๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  5. ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํšจ์œจ์„ฑ
    • ๋ฐฐ์—ด ์ด๋ฆ„๊ณผ ํฌ์ธํ„ฐ ๋ชจ๋‘ ๋ฐฐ์—ด์˜ ์š”์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐ ์žˆ์–ด์„œ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๋ฏ€๋กœ, ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

 

์ฐจ์ด์  ์š”์•ฝ

๊ตฌ๋ถ„ ๋ฐฐ์—ด ์ด๋ฆ„์„ ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ํฌ์ธํ„ฐ๋ฅผ ๋ฐฐ์—ด์ฒ˜๋Ÿผ
๋Œ€์ƒ ๋ฐฐ์—ด ์ด๋ฆ„ ์ž์ฒด ํฌ์ธํ„ฐ ๋ณ€์ˆ˜
์ดˆ์  ๋ฐฐ์—ด ์ด๋ฆ„์˜ ์—ญํ• ์„ ํฌ์ธํ„ฐ๋กœ ํ•ด์„ํ•˜๋Š” ๋ฐฉ์‹
(์ƒ์ˆ˜ ํฌ์ธํ„ฐ)
ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋™์ž‘์‹œํ‚ค๋Š” ํ™œ์šฉ๋ฐฉ์‹
(๋™์  ๋Œ€์ž… ๊ฐ€๋Šฅ)
์—ฐ์‚ฐ ๋ฐฉ์‹ *(arr+i)๋กœ ๋ฐฐ์—ด ์š”์†Œ์— ์ ‘๊ทผ pTemp[i]๋กœ ํฌ์ธํ„ฐ๋ฅผ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์‚ฌ์šฉ
์˜ˆ์‹œ arr[i], *(arr+i) pTemp[i], *(pTemp + i)

 

โš ๏ธ์ถ”๊ฐ€์ ์œผ๋กœ ์ฃผ์˜ํ•  ์ 

ํฌ์ธํ„ฐ๋ฅผ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ๊ฐ’์„ ์ฐธ์กฐํ•˜๋ฉด Undefined Behavior(์˜๋„๊ฐ€ ๋ช…ํ™•ํ•˜์ง€์•Š์€ ์ฝ”๋“œ)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ์ •ํ™•ํžˆ ์•Œ๊ณ , ๋ฐ˜๋ณต๋ฌธ์—์„œ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 

๊ฒฐ๋ก ์ ์œผ๋กœ

  • ๋ฐฐ์—ด ์ด๋ฆ„์€ ์ƒ์ˆ˜ ํฌ์ธํ„ฐ๋กœ์„œ, ๋ฐฐ์—ด์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ• ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๋ฐ˜๋ฉด, ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋Š” ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ์ฃผ์†Œ๋ฅผ ๋Œ€์ž…ํ•˜๋Š” ๋ฐ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฐ์—ด ์ด๋ฆ„์€ ๊ณ ์ •๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉํ•˜๊ณ , ํฌ์ธํ„ฐ๋Š” ๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ํ™œ์šฉ ํ•  ๋•Œ ๋” ์œ ์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.