๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐ŸŽ› Others.../- c & python & android

[C ์–ธ์–ด] ํฌ์ธํ„ฐ์™€ ํฌ์ธํ„ฐ๋ฅผ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์—ฐ์‚ฐ์ž

by Wonit 2021. 7. 2.

 

C ์–ธ์–ด์˜ ํฌ์ธํ„ฐ

์•„์ง๊นŒ์ง€ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ C ์–ธ์–ด๋Š” ์‚ฌ๋ž‘๋ฐ›๊ณ  ์žˆ๊ณ , ๊ทธ์˜ ๊ฐ์ฒด์ง€ํ–ฅ์ธ C++ ๋˜ํ•œ ์‚ฌ๋ž‘๋ฐ›๊ณ  ์žˆ์œผ๋ฉฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์žˆ์–ด์„œ ํ•„์ˆ˜์ ์ธ Unmanaged Languaged ๋ผ๊ณ  ํ‰๊ฐ€๋ฐ›๋Š”๋‹ค.

 

๊ทธ ์ด์œ ๋Š” ํ˜„๋Œ€์˜ ์–ธ์–ด ์ค‘ ๊ฐ€์žฅ ์–ด์…ˆ๋ธ”๋ฆฌ์™€ ๊ทผ์ ‘ํ•ด์„œ๊ฐ€ ์•„๋‹๊นŒ ์‹ถ์€ ์ƒ๊ฐ์ด๊ณ  ๊ทธ ์ฃผ์—ญ์ด ๋ฐ”๋กœ ํฌ์ธํ„ฐ ์ด๋‹ค.

 

๊ทธ๋Ÿผ ํฌ์ธํ„ฐ๋Š” ๋ฌด์—‡์ผ๊นŒ?

 

ํฌ์ธํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌด์–ธ๊ฐ€ ์ฏค์œผ๋กœ ์ƒ๊ฐํ•˜์ž

 

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž

 

#include <stdio.h>

int main() {
    int number = 100;

    return 0;
}

 

๊ทธ๋Ÿฌ๋ฉด ๋ฉ”๋ชจ๋ฆฌ 0x22 ์ฃผ์†Œ์— 4 byte ์˜ ๊ณต๊ฐ„์ด ํ• ๋‹น๋œ๋‹ค.

 

 

๊ทธ๋Ÿฌ๋ฉด ์šฐ๋ฆฌ๋Š” ํ•ด๋‹น ์ฃผ์†Œ๋กœ ์ ‘๊ทผ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” number ์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ง์ ‘ ์กฐ์ž‘ํ•ด์•ผ ํ•œ๋‹ค.

 

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ํฌ์ธํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ ๋งŒ์œผ๋กœ ํ•ด๋‹น ์ฃผ์†Œ ๊ณต๊ฐ„์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

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

 

ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋Š” ๋ง ๊ทธ๋Œ€๋กœ ํฌ์ธํ„ฐ, ์ฆ‰ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜์ด๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 2๊ฐ€์ง€ ์—ฐ์‚ฐ์ž๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค.

 

  1. ์ฐธ์กฐ ์—ฐ์‚ฐ์ž (*)
  2. ์ฃผ์†Œ ์—ฐ์‚ฐ์ž (*)

์ฐธ์กฐ ์—ฐ์‚ฐ์ž

 

์ฐธ์กฐ ์—ฐ์‚ฐ์ž๋Š” ํฌ์ธํ„ฐ์˜ ์ด๋ฆ„์ด๋‚˜ ์ฃผ์†Œ ์•ž์— ์‚ฌ์šฉํ•ด์„œ ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ์— ์ง€์ •๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

์ฐธ์กฐ์—ฐ์‚ฐ์ž๋Š” 2๊ฐ€์ง€๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ณ€์ˆ˜ ์ƒ์„ฑ ์‹œ์— ์‚ฌ์šฉ๋˜๋ฉด ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ•œ๋‹ค๋Š” ๊ฒƒ์ด๊ณ  ์ผ๋ฐ˜ ์—ฐ์‚ฐ์— ์‚ฌ์šฉ๋˜๋ฉด ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 

  • ์ฐธ์กฐ ์—ฐ์‚ฐ์ž์˜ ์‚ฌ์šฉ ์œ„์น˜
    • ๋ณ€์ˆ˜ ์ƒ์„ฑ ์‹œ
      • ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ ์ƒ์„ฑ
    • ์ผ๋ฐ˜ ์—ฐ์‚ฐ ์‹œ
      • ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜

 

ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” * ์ด๋ผ๋Š” ์ฐธ์กฐ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜๋ฉฐ ์ผ๋ฐ˜ ๋ณ€์ˆ˜์™€ ๊ฐ™์ด ์ƒ์„ฑํ•œ๋‹ค.

 

์ฝ”๋“œ๋กœ ๋ณด์ž๋ฉด

 

#include <stdio.h>

int main() {
    int number = 100;

    int *pointer; // ๋ณ€์ˆ˜ ์ƒ์„ฑ ์‹œ์— ์‚ฌ์šฉ๋˜์—ˆ์œผ๋‹ˆ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ ํ• ๋‹น

    printf("%d", *pointer); // ์ผ๋ฐ˜ ๋ผ์ธ์—์„œ ์‚ฌ์šฉ๋˜์—ˆ์œผ๋‹ˆ ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋ฐ˜ํ™˜

    return 0;
}

 

๊ทธ๋Ÿผ number ๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋Š” ์ฃผ์†Œ๋ฅผ ์–ด๋–ป๊ฒŒ pointer ๋ณ€์ˆ˜์— ํ• ๋‹นํ• ๊นŒ?

 

์ฃผ์†Œ ์—ฐ์‚ฐ์ž

 

์ฃผ์†Œ ์—ฐ์‚ฐ์ž๋Š” ๋ณ€์ˆ˜์˜ ์ด๋ฆ„ ์•ž์—์„œ ์ƒใ…‡๋˜๋ฉฐ ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

๋ฐ”๋กœ & ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

๊ทธ๋Ÿผ ์šฐ๋ฆฌ๋Š” number ๋ผ๋Š” ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ pointer ๋ผ๋Š” ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ๊ฒƒ์ด๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

#include <stdio.h>

int main() {
    int number = 100;

    int *pointer = &number;

    return 0;
}

 

๊ทธ๋Ÿผ ๊ฒฐ๊ตญ pointer ๋ผ๋Š” ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์— number ์˜ ์ฃผ์†Œ ๊ฐ’์ด ํ• ๋‹น๋˜์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์ด ๋œ๋‹ค.

 

 

๊ทธ๋Ÿผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•ด ์งˆ ๊ฒƒ์ด๋‹ค.

 

#include <stdio.h>
#include <assert.h>

int main() {
    int number = 16;

    int *pointer = &number; // number ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๊ฐ’ ์ €์žฅ

    assert(&number == pointer);
    assert(number == *pointer);
    assert(&number !== &pointer);

    printf("ํ…Œ์ŠคํŠธ ์„ฑ๊ณต");

    return 0;
}

 

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

 

ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋Š” ๊ผญ ์ฃผ์†Œ๊ฐ’์ด ํ• ๋‹น๋˜์–ด์•ผ ํ•œ๋‹ค.

 

์ฃผ์†Œ ๊ฐ’์„ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฃผ์†Œ ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด์„œ ํŠน์ • ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ ๊ฐ’์„ ๋ฐ˜ํ™˜๋ฐ›์•„ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ด์•ผ ํ•œ๋‹ค.

 

ํฌ์ธํ„ฐ๋ž€?

  • ๋ฒˆ์ง€์— ๋Œ€ํ•œ ๊ธฐํ˜ธํ™”๋œ ํ‘œํ˜„
    • ํฌ์ธํ„ฐ == ์ฃผ์†Œ๊ฐ’

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

  • ํฌ์ธํ„ฐ == ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๊ฐ’
  • ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ == ํฌ์ธํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜
    • ์ฃผ์†Œ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋Š” ๋ณ€์ˆ˜

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

  • int *p; ์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ •์˜
    • ์ฆ‰ p๋Š” int ํ˜• ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์ €์žฅ๋˜๋Š” ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜์ž„

& ์—ฐ์‚ฐ์ž

  • ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์— ๊ฐ’์„ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์˜ค๋กœ์ง€ ์ฃผ์†Œ ๊ฐ’๋งŒ ๊ฐ€๋Šฅ
  • & ์—ฐ์‚ฐ์ž๋Š” ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋จ
    • ์–ด๋–ค ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์˜ ์„ ๋‘ ๋ฒˆ์ง€

* ์—ฐ์‚ฐ์ž์™€ & ์—ฐ์‚ฐ์ž์˜ ๊ด€๊ณ„

  • & ํŠน์ •ํ•œ ๋ณ€์ˆœ์˜ ์„ ๋‘ ๋ฒˆ์ง€
  • * ์—ฐ์‚ฐ์ž๋Š” ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ์„ ๋‘ ๋ฒˆ์ง€๋ฅผ ์ฐธ์กฐํ•ด ์ €์žฅ๋œ ๊ฐ’

* ์˜ ์‚ฌ์šฉ ์œ„์น˜์— ๋”ฐ๋ฅธ ์—ญํ• 

  • ์ •์˜๋  ๋•Œ ์‚ฌ์šฉ
    • ์ฐธ์กฐ ์—ฐ์‚ฐ์ž
    • ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜ ํ• ๋‹น
  • ์ˆ˜์‹์—์„œ ์‚ฌ์šฉ
    • ์—ญ์ฐธ์กฐ ์—ฐ์‚ฐ์ž
    • ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์—ญ์ฐธ์กฐ
    • dereferencing

๋Œ“๊ธ€