๐Ÿ’ซ Language/C

๐Ÿ’ซ Language/C

[C/C++] typedef, union, enum ํ•ด์„ํ•˜๊ธฐ

typedef์™€ ๊ตฌ์กฐ์ฒด typedef : ํƒ€์ž… ์ด๋ฆ„์„ ์‚ฌ์šฉ์ž๊ฐ€ ์ •ํ•ด์ค€๋‹ค ์–ด๋–ค ๊ฒฝ์šฐ๋“  ์ด๋ฆ„์ด ๊ธธ์–ด์ง€๋ฉด ์•Œ์•„๋ณด๊ธฐ ํž˜๋“ค๊ธฐ ๋งˆ๋ จ์ด๋‹ค. ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ๊ตฌ์กฐ์ฒด ํƒ€์ž…์„ ์•Œ๋ ค์ฃผ๊ณ  ์ด๋ฆ„์„ ์ง€์–ด์ฃผ์–ด ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Š” ์ˆ์ฝ”๋”ฉ ์ค‘๋…์ž๋“ค์ธ ๊ฐœ๋ฐœ์ž๋“ค ๋ˆˆ์— ์ฉ ์ข‹์ง€ ์•Š์•˜๋‚˜๋ณด๋‹ค. ๊ทธ๋ž˜์„œ ๊ตฌ์กฐ์ฒด์˜ ์ •์˜์™€ ์‚ฌ์šฉ์„ ์‰ฝ๊ฒŒ ํ•ด๋ณด๋ ค๊ณ  ๋„์ž…ํ•œ ๊ฒƒ์ด typedef์ด๋‹ค. ์‚ฌ์šฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•๋“ค์ด ์žˆ๋‹ค. struct point { int xpos; int ypos; }; typedef struct point Point Point p; ์œ„์ฒ˜๋Ÿผ ์ž‘์„ฑํ•œ๋‹ค๋ฉด ๋ณ€์ˆ˜ ์„ ์–ธ์ด ์งง์•„์ง„๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. typedef struct point { int xpos; int ypos; } Point; Point p; ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ..

๐Ÿ’ซ Language/C

[C/C++] malloc๊ณผ Stack๊ณผ Heap์˜ ๊ด€๊ณ„

์ด์ „ ํฌ์ŠคํŒ…์—์„œ ์Šคํƒ ํ”„๋ ˆ์ž„ ๋‚ด์—์„œ ์‚ฌ๋ผ์ง€๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ๋ณด์กดํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋™์  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ–ˆ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋™์  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์Šคํƒ๊ณผ ํž™์„ ์•Œ์•„์•ผ ํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ : Stack vs. Heap Stack์€ ๋ฌด์—‡์„ ํฌํ•จํ•˜๋Š” ๊ฐ€? ์ง€์—ญ ๋ณ€์ˆ˜, ์ธ์ž, ๋ฆฌํ„ด ์ฃผ์†Œ Heap์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€? ๋ณ€์ˆ˜์™€ ๋น„์Šทํ•˜์ง€๋งŒ ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ์—†๋Š” ๋ฉ”๋ชจ๋ฆฌ ์กฐ๊ฐ (๋™์  ๋ณ€์ˆ˜, ๋ฌด๋ช… ๋ณ€์ˆ˜๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.) Heap์— ์žˆ๋Š” ๋™์  ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜์™€ ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•œ๋‹ค. ์ด๋Š” ์ „์—ญ ๋ณ€์ˆ˜์™€ ์œ ์‚ฌํ•˜๋‹ค. Heap์— ์žˆ๋Š” ๋™์  ๋ณ€์ˆ˜๋Š” ๋™์ ์œผ๋กœ ์ƒ์„ฑ๊ณผ ์ œ๊ฑฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Š” ์ „์—ญ ๋ณ€์ˆ˜์™€ ๋‹ค๋ฅธ ์ ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์ œ๊ฑฐํ•˜๊ธฐ ํ•˜๊ธฐ์œ„ํ•œ ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ƒ์„ฑ ํ•จ์ˆ˜ malloc(), new() ์ œ๊ฑฐ ํ•จ์ˆ˜ free() Stack ์ง€์—ญ ..

๐Ÿ’ซ Language/C

[C/C++] ํฌ์ธํ„ฐ ๋ฐฐ์—ด ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์—ด ํฌ์ธํ„ฐ

ํฌ์ธํ„ฐ ๋ฐฐ์—ด, ๋ฐฐ์—ด ํฌ์ธํ„ฐ ํ˜ผ์šฉํ•˜์—ฌ ์“ฐ๋‹ค๋ณด๋ฉด ์ด๊ฒŒ ์ •ํ™•ํžˆ ๋ฌด์Šจ ๊ฐœ๋…์ธ์ง€ ์Šค์Šค๋กœ ๊นจ๋‹ซ์ง€ ๋ชปํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ํ•œ๋ฒˆ ์ดํ•ดํ•ด๋ณด์ž. ํฌ์ธํ„ฐ ๋ฐฐ์—ด์ด๋ž€? ํฌ์ธํ„ฐ ๋ฐฐ์—ด์ด๋ž€ ๊ฐ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ํฌ์ธํ„ฐ(์ž๋ฃŒํ˜•์ด ์ฃผ์†Œ)์ธ ๊ฒƒ์„ ๋œปํ•œ๋‹ค. ๋‹ค์Œ ์˜ˆ์‹œ๋ฅผ ๋ณด์ž. char * strArr[3] = { "cat", "dog", "bird" }; printf("%s", strArr[0]); printf("%s", strArr[1]); printf("%s", strArr[2]); strArr๋Š” ํฌ์ธํ„ฐ ๋ฐฐ์—ด์ด๋‹ค. ๊ฐ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ํฌ์ธํ„ฐ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฌธ์ž์—ด์ด ์™œ ํฌ์ธํ„ฐ์ธ๊ฐ€? ์ด๋Š” ๋ฐฐ์—ด ์•ˆ์— ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํฌ์ธํ„ฐ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํฌ์ธํ„ฐ ๋ฐฐ์—ด๊ณผ ๋”๋ธ” ํฌ์ธํ„ฐ ํฌ์ธํ„ฐ ๋ฐฐ์—ด์˜ ๋˜ ๋‹ค๋ฅธ ํ‘œํ˜„ ๋ฐฉ๋ฒ•์œผ๋กœ ๋”๋ธ” ํฌ์ธํ„ฐ๋ฅผ..

๐Ÿ’ซ Language/C

[C/C++] ์ž๋™ ํ• ๋‹น ๋ฌธ์ž์—ด๊ณผ ํฌ์ธํ„ฐ

C์–ธ์–ด์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋‹ˆ ์–ด์ƒ‰ํ•œ ๋ฌธ๋ฒ•๊ณผ ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๋ฌธ๋ฒ•๋“ค์ด ํผ์ฆ์ฒ˜๋Ÿผ ๋‹ค๊ฐ€์˜ค๊ณค ํ•œ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ์–ธ์–ด์ด๊ธฐ๋„ ํ•˜๊ณ , ๋ถ„๋ช… ๋„์›€์ด ๋˜๋Š” ๋ถ€๋ถ„๋„ ๋งŽ๋‹ค. ์ง€๊ธˆ๋ถ€ํ„ฐ ๊ฐœ์ธ์ ์œผ๋กœ ๊ณต๋ถ€ํ•˜๋ฉฐ, ํ—ท๊ฐˆ๋ ธ๋˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ์ •๋ฆฌ๋ณด๊ณ ์ž ํ•œ๋‹ค. ์ž๋™ ํ• ๋‹น ๋ฌธ์ž์—ด์ด๋ž€? ํฐ ๋”ฐ์˜ดํ‘œ๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ ๋ฌธ์ž์—ด์ด๋‹ค. ๋‹จ, char ๋ฐฐ์—ด ์„ ์–ธํ•  ๋•Œ ์ดˆ๊ธฐํ™” ๊ฐ’์œผ๋กœ ์“ฐ์ด๋Š” ๊ฒฝ์šฐ๋Š” ์ œ์™ธํ•œ๋‹ค. char * str = "Oh String"; ์œ„ ๊ตฌ๋ฌธ ๊ฐ™์ด ๋ฌธ์ž์—ด์„ ํ‘œํ˜„ํ•  ๋•Œ ์ž๋™ ํ• ๋‹น ๋ฌธ์ž์—ด์ด ์“ฐ์ธ๋‹ค. ์ด ๋ฌธ์ž์—ด์€ ๋ณ€ํ™”ํ•  ์ˆ˜ ์—†๋‹ค(๋ถˆ๋ณ€). ์™œ ๋ถˆ๋ณ€์ธ๊ฐ€? ์ด๋Š” Const์— ๋Œ€ํ•ด ์ดํ•ดํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ํฌ์ธํ„ฐ์— Const ์„ ์–ธ ํฌ์ธํ„ฐ(*)์™€ const๋Š” ์œ„์น˜์— ๋”ฐ๋ผ ์‚ฌ์šฉ ์˜๋ฏธ๊ฐ€ ๋‹ค๋ฅด๋‹ค. 1. const int * ptr ํ•ด๋‹น ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•ด ๊บผ..

TIlearn
'๐Ÿ’ซ Language/C' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก