๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ปTIL10. C : ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ, string์˜ ์ง„์‹ค

Lilyยท2021๋…„ 6์›” 3์ผ
0

Today I Learned

๋ชฉ๋ก ๋ณด๊ธฐ
10/30

์ด ๊ธ€์€ Boostcourse ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ์ปดํ“จํ„ฐ ๊ณผํ•™์„ ์ˆ˜๊ฐ•ํ•˜๊ณ  ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ‰ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ _16์ง„๋ฒ•

C๋กœ ์ž‘์„ฑ๋œ ๋ณ€์ˆ˜๋Š” ์ปดํ“จํ„ฐ ๋ฉ”๋ชจ๋ฆฌ์— ์–ด๋–ป๊ฒŒ ์ €์žฅ๋ ๊นŒ? ์ปดํ“จํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ •๋ณด๋ฅผ byte๋‹จ์œ„๋กœ ์ €์žฅํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฐ byte๋Š” 16์ง„์ˆ˜๋กœ ํ‘œํ˜„๋œ ๊ณ ์œ ํ•œ ์ˆซ์ž๊ฐ’์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. 16์ง„์ˆ˜๋Š” 2์ง„์ˆ˜๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. 2์ž๋ฆฌ์˜ 16์ง„์ˆ˜๋Š” 1byte(=8bit)์˜ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ณด๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ ์šฉํ•˜๋‹ค!


๐Ÿ‰ ์ฃผ์†Œ ์ถœ๋ ฅ

C์–ธ์–ด์—์„œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 int n = 50;
 printf("%p",&n);     // n์˜ ์ฃผ์†Œ ์ถœ๋ ฅ
 printf("%i",*&n);    // n๊ฐ’ ์ถœ๋ ฅ
 
  • & : ๋ณ€์ˆ˜ ์•ž์— &์„ ๋ถ™์ด๋ฉด ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๊ฐ€ ๋œ๋‹ค
  • %p : ์ฃผ์†Œ์˜ ํ˜•์‹์ง€์ •์ž
  • * : ํ•ด๋‹น ์ฃผ์†Œ๋กœ ๊ฐ€์„œ ๊ฐ’์„ ๋ฐ›์•„์˜จ๋‹ค

๐Ÿ‰ ํฌ์ธํ„ฐ (pointer)

ํฌ์ธํ„ฐ(pointer)๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๋‹ค๋ฅธ ๋ณ€์ˆ˜, ํ˜น์€ ๊ทธ ๋ณ€์ˆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งํ•œ๋‹ค. -์œ„ํ‚ค๋ฐฑ๊ณผ -

๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜๋ฅผ ํฌ์ธํ„ฐ๋ผํ•˜๊ณ , ํฌ์ธํ„ฐ๋Š” ๋ณ€์ˆ˜ ์•ž์—*๋ฅผ ๋ถ™์—ฌ ์ •์˜ํ•œ๋‹ค.

int main(void)
{
   int n = 50;
   int *p = &n;    // p๋Š” int์ž๋ฃŒํ˜•์˜ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ
   printf("%p\n", p);
   printf("%i\n", *p);
}

n๊ณผ p๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๋Š” ํ˜•ํƒœ๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํ‘œํ˜„๋œ๋‹ค.

์ด๋Š” ๊ณง "p๊ฐ€ 50์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค"๊ณ  ์ถ”์ƒ์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ‰ string์˜ ์ง„์‹ค

string์€ C์–ธ์–ด์—์„œ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. (CS50 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ typedef๋กœ ์ •์˜ํ•œ ๋ฌธ์ž์—ด์„ ์ง€๊ธˆ๊ป ๋นŒ๋ ค์จ์™”๋˜ ๊ฒƒ) string, ๋ฌธ์ž์—ด์€ ์‹ค์ œ๋กœ ๋ฌธ์ž์—ด์˜ ์ฒซ ๊ธ€์ž์˜ ์ฃผ์†Œ์˜ ํฌ์ธํ„ฐ๋กœ, ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ์ฝ์–ด์˜ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

์‹ค์ œ C์—์„œ๋Š” ํฌ์ธํ„ฐ๊ฐ€ "char ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€ ์ €์žฅ๋œ ์ฃผ์†Œ"๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•œ๋‹ค.

int main(void)
{
    char *s = "EMMA";
    printf("%s\n", s);
}

์ถœ๋ ฅ > EMMA

s๋Š” "EMMA"์ค‘ "E"์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๊ณ , printfํ•จ์ˆ˜๋Š” s๊ฐ€ ๊ฐ€๊ธฐ๋ฆฌํ‚ค๋Š” "E"๋ถ€ํ„ฐ NULL์ข…๋‹จ๋ฌธ์ž๊นŒ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
๋”ฐ๋ผ์„œ NULL์ข…๋‹จ๋ฌธ์ž๋Š” string์˜ ๋์ž„์„ ์•Œ๋ฆฌ๋Š” ์—ญํ• ์„ ํ•จ์œผ๋กœ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค ํ•  ์ˆ˜ ์žˆ๋‹ค.

profile
i๐ŸŽS ๊ฐœ๋ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€