[C์–ธ์–ด] ๊ตฌ์กฐ์ฒด์™€ ๊ณต์šฉ์ฒด(2)

2025. 11. 29. 08:53ยท๐Ÿ› ๏ธBackend/โš™๏ธC

โœ… 1. ํ•จ์ˆ˜์™€ ๊ตฌ์กฐ์ฒด

(1) ๊ตฌ์กฐ์ฒดํ˜• ์ž๋ฃŒ๋ฅผ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๋Š” 2๊ฐ€์ง€ ๋ฐฉ์‹

  • ๊ฐ’์— ์˜ํ•œ ์ž๋ฃŒ ์ „๋‹ฌ ๋ฐฉ์‹๊ณผ ์ฐธ์กฐ์— ์˜ํ•œ ์ž๋ฃŒ ์ „๋‹ฌ ๋ฐฉ์‹ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰จ.

(2) ๊ฐ’์— ์˜ํ•œ ๊ตฌ์กฐ์ฒดํ˜• ์ž๋ฃŒ ์ „๋‹ฌ ๋ฐฉ์‹

  • ๊ตฌ์กฐ์ฒด ์ž๋ฃŒ๋ฅผ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋ฉฐ, ํ•จ์ˆ˜์˜ ํ˜•์‹ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๊ตฌ์กฐ์ฒดํ˜•์œผ๋กœ ์„ ์–ธํ•จ.
  • ๊ตฌ์กฐ์ฒด ์ „์ฒด๋ฅผ ํ˜•์‹ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋ณต์‚ฌํ•จ. ์ฆ‰, ํ˜•์‹ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์‹ค ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋ณต์‚ฌ๋ณธ์ด๋ฉฐ, ๋‹ค๋ฅธ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ–๊ฒŒ ๋จ.
  • ๊ตฌ์กฐ์ฒด์˜ ์šฉ๋Ÿ‰์ด ํฐ ๊ฒฝ์šฐ ์ธ์ˆ˜ ์ „๋‹ฌ์ด ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Œ.
  • ๊ตฌ์กฐ์ฒด ์ „์ฒด๋ฅผ ๋ณต์‚ฌํ•˜๋ฏ€๋กœ ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๋ฉฐ, ๊ตฌ์กฐ์ฒด ๋ณต์‚ฌ๋ณธ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ํฐ ๊ธฐ์–ต๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋จ.
#include <stdio.h>
struct num calc(struct num); // ํ•จ์ˆ˜ ์„ ์–ธ
struct num {
  int x;
  int y;
  int sum;
  int mul;
};
int main() {
  struct num number1;
  number1.x = 10;
  number1.y = 20;
  number1 = calc(number1); // ๊ตฌ์กฐ์ฒด ์ „์ฒด๊ฐ€ ํ†ต์งธ๋กœ ๋ณต์‚ฌ๋˜์–ด number1์— ๋ฎ์–ด์”Œ์›Œ์ง.
  printf("x:%d, y:%d, sum:%d, mul:%d\n",number1.x, number1.y, number1.sum, number1.mul);
  getchar();
}
struct num calc(struct num number2) {
  number2.sum = number2.x + number2.y;
  number2.mul = number2.x * number2.y;
  return(number2);
}
  • ๋งจ ํ•˜๋‹จ์— calc() ํ•จ์ˆ˜๋Š” ํ˜•์‹ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š” ์ž๋ฃŒํ˜•์˜ ํƒ€์ž…์€ struct ํƒ€์ž…์ด๊ณ , ๋ฐ˜ํ™˜ ํƒ€์ž…๋„ struct ํƒ€์ž…์œผ๋กœ ์ •์˜๋จ.
  • ์œ„์™€ ๊ฐ™์ด number1 = calc(number1); number1 ์— ๋Œ€์ž…๋˜๋Š” ๊ฐ’์œผ๋กœ๋Š” return ๋ฐ›์€ ํ•ด๋‹น ๊ตฌ์กฐ์ฒด ๋ณต์‚ฌ๋ณธ์„ number1 ์— ๋ฎ์–ด์”Œ์šฐ๊ฒŒ ๋จ. ์ˆ˜์ • ๋œ ๋ถ€๋ถ„์ด๋‚˜ ์ถ”๊ฐ€ ๋œ ๋ถ€๋ถ„์˜ ๋ฉค๋ฒ„๋งŒ ๋ฐ”๊พธ๋Š”๊ฒŒ ์•„๋‹Œ, return ๋ฐ›์€ ๊ตฌ์กฐ์ฒด ์ „์ฒด๋ฅผ ๋ฎ์–ด ์”Œ์šฐ๊ฒŒ ๋จ.
  • ** ๋งŒ์•ฝ ๋ณ„์นญ์„ ๋ถ€์—ฌํ–ˆ๋‹ค๋ฉด, struct ํ‚ค์›Œ๋“œ๋ฅผ ์“ฐ์ง€ ์•Š๊ณ  ๋ณ„์นญ์œผ๋กœ ์จ๋„ ๋จ. **
  • ** ์ฆ‰, struct num calc(struct num number2) -> Num calc(Num number2) ์™€ ๊ฐ™์€ ํ˜•ํƒœ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ. **

(3) ์ฐธ์กฐ์— ์˜ํ•œ ๊ตฌ์กฐ์ฒดํ˜• ์ž๋ฃŒ ์ „๋‹ฌ ๋ฐฉ์‹ ( ํฌ์ธํ„ฐ ๋ฐฉ์‹ )

  • ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ๋ฅผ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋ฉฐ, ํ•จ์ˆ˜์˜ ํ˜•์‹ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐํ˜•์œผ๋กœ ์„ ์–ธํ•จ.
  • ๊ตฌ์กฐ์ฒด์˜ ํฌ์ธํ„ฐ๋งŒ ํ˜•์‹ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋ณต์‚ฌํ•˜๋ฉฐ, ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹ค ๋งค๊ฐœ๋ณ€์ˆ˜์— ํ•ด๋‹น๋˜๋Š” ๊ตฌ์กฐ์ฒด์˜ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•  ์ˆ˜๋„ ์žˆ์Œ.
  • ๊ตฌ์กฐ์ฒด์˜ ๊ธฐ์–ต๊ณต๊ฐ„ ํฌ๊ธฐ์— ๊ด€๊ณ„์—†์ด 1๊ฐœ์˜ ์ฃผ์†Œ๋งŒ ์ „๋‹ฌํ•˜๋ฉด ๋œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Œ.
  • ๊ตฌ์กฐ์ฒด์˜ ์šฉ๋Ÿ‰์ด ํฐ ๊ฒฝ์šฐ ๊ตฌ์กฐ์ฒด ์ „์ฒด ๋ณต์‚ฌ์— ๋น„ํ•ด ํšจ์œจ์ ์œผ๋กœ ์ž๋ฃŒ๋ฅผ ์ „๋‹ฌ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ธฐ์–ต๊ณต๊ฐ„๋„ ํšจ์œจ์  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.
  • ์ฆ‰, ๊ฐ’ ์ „๋‹ฌ ๋ฐฉ์‹์€ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ์กฐ์ฒด ํ•˜๋‚˜๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๊ฒŒ ๋˜์ง€๋งŒ, ํฌ์ธํ„ฐ ๋ฐฉ์‹์€ ๊ตฌ์กฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜ ํ•˜๋‚˜๋งŒ ์žˆ์œผ๋ฉด ๋จ. ํšจ์œจ์ ์ž„.
#include <stdio.h>
struct num *calc(struct num *); // ํ•จ์ˆ˜ ์„ ์–ธ
struct num {
  int x;
  int y;
  int sum;
  int mul;
};
int main() {
  struct num number1;
  number1.x = 10;
  number1.y = 20;
  calc(&number1); // ํ•จ์ˆ˜ ํ˜ธ์ถœ -> ์ฃผ์†Œ๊ฐ’ ์ „๋‹ฌ
  printf("x:%d, y:%d, sum:%d, mul:%d\n",number1.x, number1.y, number1.sum, number1.mul);
  getchar();
}
struct num *calc(struct num *number2) {
  number2.sum = number2.x + number2.y;
  number2.mul = number2.x * number2.y;
  return(number2);
}
  • main() ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ calc(&number1) ๋กœ ์ฃผ์†Œ๊ฐ’์„ ์ „๋‹ฌํ•˜๋ฉด์„œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ์Œ.
  • calc ํ•จ์ˆ˜๋Š” ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋กœ ์ฃผ์†Œ๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋•Œ ํ•จ์ˆ˜๋ช…์—๋„ ํฌ์ธํ„ฐ๋ฅผ ๋ถ™ํžˆ๊ฒŒ ๋จ.

โœ… 2. ๊ตฌ์กฐ์ฒด ๋น„ํŠธํ•„๋“œ

(1) ๋น„ํŠธํ•„๋“œ

[ ๋น„ํŠธํ•„๋“œ ๋ž€? ]

  • ๊ตฌ์กฐ์ฒด์˜ ๋ฉค๋ฒ„๊ฐ€ ์žˆ๋Š” ๊ณณ์„ ํ•„๋“œ๋ผ ํ•˜๋Š”๋ฐ, ํ•ด๋‹น ํ•„๋“œ์—์„œ ๋ฉค๋ฒ„๋“ค์€ ์ž๋ฃŒํ˜•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ.
  • ์ด๋Ÿฌํ•œ ์ž๋ฃŒํ˜•์„ ๋น„ํŠธ ๋‹จ์œ„๋กœ ์ง€์ •ํ•˜์—ฌ ์ž์ฃ ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉค๋ฒ„๋ฅผ ์ •์˜ํ•œ ๊ฒƒ์ด ๋น„ํŠธํ•„๋“œ์ž„.
  • ์‰ฝ๊ฒŒ๋งํ•ด, ์ž๋ฃŒํ˜• ๋ง๊ณ  ๋น„ํŠธ ๋‹จ์œ„๋กœ ์‚ฌ์šฉ์ž ์ •์˜ ์ž๋ฃŒํ˜•์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Œ.

[ ๋น„ํŠธํ•„๋“œ์˜ ์‚ฌ์šฉ ๋ชฉ์  ]

๐Ÿ” ๋น„ํŠธ ๋‹จ์œ„ ํ”Œ๋ž˜๊ทธ
**ํ”Œ๋ž˜๊ทธ(flag)**๋Š” ์–ด๋–ค ์ƒํƒœ, ์กฐ๊ฑด, ์˜ต์…˜ ๋“ฑ์„ “์ผœ์ง/๊บผ์ง(1/0)”์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฐ’์„ ์˜๋ฏธ
์˜ˆ์‹œ)
๊ณต๊ฒฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€: 1 ๋˜๋Š” 0
๋ฐฉ์–ด ์ƒํƒœ ์—ฌ๋ถ€: 1 ๋˜๋Š” 0
์ ํ”„ ๊ฐ€๋Šฅ ์—ฌ๋ถ€: 1 ๋˜๋Š” 0
์ด๋Ÿฐ “์ƒํƒœ”๋“ค์„ 1๋น„ํŠธ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Œ.
  • ํ•„์š”ํ•œ ๋งŒํผ์˜ ๋น„ํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž๋ฃŒ๋ฅผ ์ €์žฅํ•จ์œผ๋กœ์จ ๊ธฐ์–ต๊ณต๊ฐ„ ์ ˆ์•ฝ
  • ๋น„ํŠธ ๋‹จ์œ„๋กœ ํŠน์ • ์ƒํƒœ๋‚˜ ์กฐ๊ฑด ๋“ฑ์„ ํ‘œํ˜„ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ(flag)๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์šฉ๋„์˜ ์ž๋ฃŒ

(2) ๋น„ํŠธํ•„๋“œ - ์ •์˜ ํ˜•์‹

  • ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” int ๋˜๋Š” unsigned int ๋ฅผ ํ™œ์šฉํ•˜์ง€๋งŒ, ์ปดํŒŒ์ผ๋Ÿฌ ๊ตฌํ˜„์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ •์ˆ˜ํ˜•๋„ ๊ฐ€๋Šฅํ•จ. ( ์ฆ‰, ์ผ๋‹จ ์ •์ˆ˜๋งŒ ๋จ. )
  • ๋˜ํ•œ, ์‹ค์ˆ˜ํ˜•, ํฌ์ธํ„ฐํ˜•, ์‚ฌ์šฉ์ž ์ •์˜ํ˜•, ๋ฐฐ์—ด ์ž๋ฃŒํ˜•์€ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•จ.
  • ๊ทธ๋ฆฌ๊ณ  ํ•˜๋‚˜์˜ ๋น„ํŠธํ•„๋“œ์˜ ํฌ๊ธฐ๋Š” ์ž๋ฃŒํ˜• ์ด๋‚ด์—ฌ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— int(32bit) ๋ฅผ ๋„˜์–ด์„œ๋Š” ๋น„ํŠธํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๋ฉด ์˜ค๋ฅ˜๋‚จ.

  • a,b,c ๊ฐ€ ๊ฐ๊ฐ์˜ ๋ฉค๋ฒ„๋ณ„๋กœ ์ง€์ •ํ•œ ๋น„ํŠธ ์ˆ˜ ๋งŒํผ์˜ ๊ณต๊ฐ„๋งŒ ์‚ฌ์šฉํ•จ.
  • ๋น„ํŠธํ•„๋“œ๊ฐ„์€ ์ž๋ฃŒํ˜•์— ๋”ฐ๋ฅธ ๊ธฐ์–ต๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, a,b,c ๊ฐ๊ฐ์€ 32bit ๋‚ด๋ถ€์—์„œ 1, 2, 1 bit ์”ฉ ์ฐจ์ง€๋ฅผ ํ•˜๊ฒŒ ๋จ.
  • ์ฆ‰, ๊ณต๊ฐ„์— ๋Œ€ํ•œ ํšจ์œจ์„ฑ์„ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์Œ.
  • sizeof(struct nibble) == sizeof(int) ์˜ ๊ฒฐ๊ณผ๋Š” true๊ฐ€ ๋‚˜์˜ด. ์ฆ‰, ํ•ด๋‹น ๊ตฌ์กฐ์ฒด์˜ ํฌ๊ธฐ๊ฐ€ int(32bit) ๋™์ผํ•˜๋‹ค๋Š” ์˜๋ฏธ์ž„.

  • ์ปดํŒŒ์ผ๋Ÿฌ ๊ตฌํ˜„์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ •์ˆ˜ํ˜•๋„ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, short ์ž๋ฃŒํ˜• ๋˜ํ•œ ์ด์šฉ์ด ๊ฐ€๋Šฅ ํ•  ์ˆ˜๋„ ์žˆ์Œ.

(3) ๋น„ํŠธํ•„๋“œ - ์‚ฌ์šฉ ์˜ˆ์‹œ

  • short(16bit) ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” ์ž๋ฃŒํ˜•์ด๊ธฐ ๋•Œ๋ฌธ์—, 16๊ฐœ์˜ ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ.
  • ์ดํ›„, ๋น„ํŠธ ํ•„๋“œ๋กœ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๋ฉด ํ•ด๋‹น ํฌ๊ธฐ์—์„œ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•œ ๊ฐ’๋งŒ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ.
  • ์˜ˆ๋ฅผ๋“ค์–ด, ๋น„ํŠธํ•„๋“œ๋ฅผ 1bit ๋ฅผ ํ• ๋‹น ํ–ˆ๋Š”๋ฐ, ๊ฑฐ๊ธฐ์— 2 or 3 or 4 .. ๋ฅผ ๋„ฃ๋Š” ๊ฒฝ์šฐ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋‚  ์ˆ˜ ์žˆ์Œ.
  • ์ดํ›„, ๋ฉค๋ฒ„๋ฅผ ์ฐธ์กฐํ•ด์„œ ์ˆ˜์ •์„ ํ•  ์‹œ, ๋น„ํŠธ์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ์ด ๋˜๊ฒŒ ๋˜๋ฉฐ, ํฌ๊ธฐ์— ๋งž๋Š” ์ˆ˜๋งŒ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ.

  • unsigned ์˜ default ๋Š” int ์ž๋ฃŒํ˜•์ž„. ์ฆ‰, 32 bit ํฌ๊ธฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•จ.

(4) ๋น„ํŠธํ•„๋“œ - ์ €์žฅ

  • ์œ„์™€ ๊ฐ™์ด short ์€ 16bit ๋ฅผ ๊ฐ€์ง€๋Š” ์ž๋ฃŒํ˜•์ธ๋ฐ 5, 6, 6, 4 = 21bit ๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ๋น„ํŠธํ•„๋“œ๊ฐ€ ์„ ์–ธ์ด ๋จ.
  • ํฌ๊ธฐ๊ฐ€ ๋งž์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— short(16bit) ๋ฅผ 2๊ฐœ ์‚ฌ์šฉ์„ ํ•˜๊ฒŒ ๋จ. ( 32bit ํ• ๋‹น )
  • ํ•˜์ง€๋งŒ, ์„ธ๋ถ€์ ์œผ๋กœ a, b ๋Š” ๋“ค์–ด๊ฐ€๋Š”๋ฐ c๊ฐ€ ๋“ค์–ด๊ฐ€๊ธฐ ์—๋Š” 1bit ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•จ. ์ฆ‰, ์—‘์„ธ์Šค ๊ฒฝ๊ณ„์— ๊ฑธ์ณ์žˆ๋Š” ๊ฒฝ์šฐ์ž„.
  • ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” 2๋ฒˆ์— ๊ฑธ์ณ์„œ ๋น„ํŠธ๋ฅผ ์ฝ์–ด์•ผ ๋˜๊ณ , ๊ทธ ๋น„ํŠธ๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ํ•ฉ์น˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผํ•จ. ๋น„ํšจ์œจ์ ์ž„.
  • ๊ทธ๋ž˜์„œ, c(6bit) ๋ฅผ ๋‹ค์Œ short ๊ณต๊ฐ„์— ํ• ๋‹นํ•˜๊ณ  ๊ทธ ๋‹ค์Œ d(4bit) ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ํŒจ๋”ฉ์œผ๋กœ ๋ฎ์–ด์”Œ์šฐ๊ฒŒ ๋จ.

[ ๋ฉค๋ฒ„ ์ด๋ฆ„์ด ์—†๋Š” ๋น„ํŠธํ•„๋“œ - ํŒจ๋”ฉ ]

  • unsigned short = 16bit ์ด๋‹ค.
  • ์ฆ‰, 16bit ํฌ๊ธฐ์˜ ์ž๋ฃŒํ˜•์„ ํ• ๋‹น ํ•˜๊ณ , ๊ทธ๊ณณ์— ๋ฉค๋ฒ„๋“ค์„ ๋น„ํŠธํ•„๋“œ๋กœ์จ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋„ฃ๋Š” ๊ณผ์ •์ด๋‹ค.
  • ์ด ๊ณผ์ •์—์„œ ๋ฉค๋ฒ„์ด๋ฆ„์ด ์—†๋Š” ๋น„ํŠธํ•„๋“œ๋ฅผ ์„ ์–ธํ•˜๋ฉด, ๊ทธ๊ณณ์—๋Š” ์„ ์–ธ ๋œ ๋น„ํŠธํ•„๋“œ์˜ ํฌ๊ธฐ ๋งŒํผ ํŒจ๋”ฉ์„ ๋ฐฐ์น˜ ํ•  ์ˆ˜ ์žˆ์Œ.

[ ๋ฉค๋ฒ„ ํฌ๊ธฐ๊ฐ€ 0์ธ ๋น„ํŠธํ•„๋“œ - ํŒจ๋”ฉ ]

  • ๋น„ํŠธํ•„๋“œ์˜ ํฌ๊ธฐ๋ฅผ 0์œผ๋กœ ์„ ์–ธํ•œ ๊ฒฝ์šฐ, 16bit ๋ฅผ ์‚ฌ์šฉ ์ค‘์ธ a ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์ด๋ฏ€๋กœ, ์ ‘๊ทผ๋‹จ์œ„๋ฅผ ๊ฑด๋„ˆ๋›ฐ์–ด ๋‹ค์Œ ์ ‘๊ทผ๋‹จ์œ„์— ๋ฐฐ์น˜๋˜๊ฒŒ ํ•จ. ์ฆ‰, ์ž๋ฃŒํ˜• ํฌ๊ธฐ๋งŒํผ ๊ฑด๋„ˆ๋›ฐ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž„. 10 bit ๋ฅผ ํŒจ๋”ฉ์œผ๋กœ ๋ฎ๊ณ  ๊ฑด๋„ˆ๋›ฐ๋Š” ๊ฒƒ์ž„.

[ ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•์˜ ๋น„ํŠธ ํ•„๋“œ ]

short a : 5 = short(16bit)
unsigned  b : 6 = int(32bit)
signed  c : 6 = int(32bit)
unsigned  d : 4 = int(32bit)
  • ๋‹ค์–‘ํ•œ ์ž๋ฃŒํ˜•์„ ๊ฐ€์ง€๋Š” ๋น„ํŠธํ•„๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ๊ฐ ๋น„ํŠธํ•„๋“œ๋งˆ๋‹ค ๊ณต๊ฐ„์„ ํ• ๋‹น์„ ํ•ด์„œ ์‚ฌ์šฉ์„ ํ•˜๊ฒŒ ๋จ.
  • ๋˜ํ•œ, short ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€๋Š” int(32bit) ์ด๋ฏ€๋กœ, ์—‘์„ธ์Šคํ•˜๊ธฐ ํŽธํ•˜๊ฒŒ short ์„ 2๊ฐœ ์จ์„œ 32bit ํ• ๋‹นํ•œ ๋’ค ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์„ ๋ฏธ์‚ฌ์šฉ ๋ถ€๋ถ„์œผ๋กœ ๋‚จ๊ธฐ๋ฉฐ ์ด 64bit ๊ณต๊ฐ„์„ ํ• ๋‹นํ•ด์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ฒŒ ๋จ.
  • ์ฆ‰, ์ ‘๊ทผ ๋‹จ์œ„๊ฐ€ 32bit ๊ธฐ์ค€์œผ๋กœ ๋˜์–ด์„œ 4bit ๋‹จ์œ„๋กœ ์ ‘๊ทผ์„ ํ•œ๋‹ค? ๋ผ๋Š”๊ฒƒ ๊ฐ™์Œ.

โœ… 3. ๊ณต์šฉ์ฒด

(1) ๊ณต์šฉ์ฒด - ๊ฐœ๋…

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

(2) ๊ณต์šฉ์ฒด - ํ™œ์šฉ ๋ฐ ์ •์˜

  • ๊ตฌ์กฐ์ฒด์™€ ๋™์ผํ•œ ๊ตฌ์กฐ๋กœ ์ •์˜๊ฐ€ ๋˜๋ฉฐ, ๊ฐ€์žฅ ํฐ ํฌ๊ธฐ๋ฅผ ์ฐจ์ง€ํ•˜๋Š” double(8byte) ํฌ๊ธฐ๋กœ ๊ณต๊ฐ„์ด ๋งŒ๋“ค์–ด์ง„๋‹ค.

(3) ๊ณต์šฉ์ฒด - ๋ณ€์ˆ˜์˜ ์„ ์–ธ

  • ๊ณต์šฉ์ฒด ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ตฌ์กฐ์ฒด์˜ struct ์™€ ๋™์ผํ•˜๊ฒŒ union ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์„ ์–ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

(4) ๊ณต์šฉ์ฒด - ๋ฉค๋ฒ„ ์ ‘๊ทผ

  • ๊ตฌ์กฐ์ฒด์™€ ๋™์ผํ•˜๊ฒŒ ์ฐธ์กฐ ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•ด์„œ ์ ‘๊ทผ ํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž… ํ•  ์ˆ˜ ์žˆ์Œ.
  • ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„์™€ ๊ฐ™์ด abc.a = 'A'; ๋ฅผ ๋„ฃ๊ณ  abc.b = 66; ๋ฅผ ๋„ฃ๊ฒŒ ๋˜๋ฉด, abc.a ์˜ ๊ฐ’๋„ ๋ฐ”๋€Œ๊ฒŒ ๋จ.
  • ์ฆ‰, ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„ ์ž์ฒด๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊พธ๋ฉด ์ „์ฒด ๋‹ค ๋ฐ”๋€Œ๊ฒŒ ๋˜๋Š” ํ˜•์‹์ž„.

(5) ๊ณต์šฉ์ฒด - ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ ๋ฉค๋ฒ„ ์ ‘๊ทผ

  • ๊ตฌ์กฐ์ฒด์™€ ๋™์ผํ•˜๊ฒŒ "->" ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉ ํ•  ์ˆ˜ ์žˆ์Œ. ์ฐธ๊ณ ๋กœ (*p).a ๋กœ๋„ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•จ. 

(6) ๊ณต์šฉ์ฒด - ์˜ˆ์ œ

#include <stdio.h>

int main() {
    union test {
        short i; // 2byte
        float f; // 4byte
        double d; // 8byte
    };
    union test u; // union var ์„ ์–ธ
    u.i = u.f = u.d = 0; // ์‚ฌ์‹ค์ƒ d์—๋งŒ 0์„ ๋„ฃ์–ด๋„ ์ดˆ๊ธฐํ™”๋Š” ๋จ.
    printf("%zd bytes\n", sizeof(u)); // %zd: sizeof ๋ฆฌํ„ด ๋˜๋Š” byte ์ˆ˜๋ฅผ ๋‹ด๊ธฐ ์œ„ํ•œ ๊ทธ๋ฆ‡
    u.i = 100;
    printf("%d %f %f \n", u.i, u.f, u.d);
    u.f = 0.5;
    printf("%d %f %f \n", u.i, u.f, u.d);
    u.d = 0.016667;
    printf("%f\n", u.d);
}
// [ ์ถœ๋ ฅ ]
// 8 bytes
// 100 0.000000 0.000000 
// 0 0.500000 0.000000 
// 0.016667
  • ๊ณต์šฉ์ฒด test ๋ฅผ ์ •์˜ํ•œ ๋’ค, ๋ฉค๋ฒ„๋กœ๋Š” shhort, float, double ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, 8byte ํฌ๊ธฐ๊ฐ€ ํ• ๋‹น์ด ๋จ.
  • ์ดํ›„, u.i = u.f = u.d = 0; ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ฃผ์—ˆ์ง€๋งŒ, ์‚ฌ์‹ค์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— d์—๋งŒ 0์„ ๋„ฃ์–ด๋„ ์ดˆ๊ธฐํ™”๋Š” ๋จ.
  • ์ดํ›„, i, f, d ๋ฅผ ์ถœ๋ ฅ์„ ํ•˜๋ฉด 100, 0.000000, 0.000000 ์ด ์ถœ๋ ฅ์ด ๋˜๋Š”๋ฐ, ๋ชจ๋“  ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๊ฐ€ ๋™์ผํ•˜๊ฒŒ 100์„ ๊ฐ€์ง€์ง€ ์•Š๋Š” ์ด์œ ๋Š” u.f ์™€ u.d ๋Š” ๊ณต์œ ํ•˜๋Š” ๋™์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ float, double ํ˜•์‹์œผ๋กœ ํ•ด์„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ €์žฅ๋œ raw ๋น„ํŠธ๊ฐ€ ์ •์ˆ˜ํ˜• 100 ์ด๋ฏ€๋กœ float ์ด๋‚˜ double ํ˜•ํƒœ๋กœ๋Š” ์ •์ƒ์ ์ธ ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ํŒ๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— 0์ด ๋‚˜์˜ค๋Š” ๊ฒƒ์ž„.
  • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 0 0.500000 0.000000 ์ด ๋‚˜์˜ค๋Š” ๊ฒƒ๋„ ๋™์ผํ•œ ์ด์œ ์ด๋‹ค.

'๐Ÿ› ๏ธBackend > โš™๏ธC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[C์–ธ์–ด] ๊ตฌ์กฐ์ฒด์™€ ๊ณต์šฉ์ฒด(1)  (0) 2025.11.27
[C์–ธ์–ด] ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ(3)  (0) 2025.11.26
[C์–ธ์–ด] ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ(2)  (0) 2025.10.17
[C์–ธ์–ด] ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ(1)  (0) 2025.10.16
[C์–ธ์–ด] ํ•จ์ˆ˜์™€ ๊ธฐ์–ต ํด๋ž˜์Šค(2)  (0) 2025.10.15
'๐Ÿ› ๏ธBackend/โš™๏ธC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [C์–ธ์–ด] ๊ตฌ์กฐ์ฒด์™€ ๊ณต์šฉ์ฒด(1)
  • [C์–ธ์–ด] ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ(3)
  • [C์–ธ์–ด] ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ(2)
  • [C์–ธ์–ด] ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ(1)
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด๋ณด๊ธฐ (195) N
      • ๐ŸŽ“๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต (51) N
        • โš™๏ธ์ปดํ“จํ„ฐ์˜ ์ดํ•ด (11)
        • ๐Ÿ’ป์ปดํ“จํ„ฐ๊ณผํ•™ ๊ฐœ๋ก  (15)
        • ๐Ÿ”ข์ž๋ฃŒ๊ตฌ์กฐ (13) N
        • ๐ŸŒ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ… (11)
        • ๐Ÿ–ฅ๏ธ์ปดํ“จํ„ฐ๊ณผํ•™๊ณผ (1)
      • ๐Ÿ› ๏ธBackend (68)
        • ๐Ÿ“š๋ฐฑ์—”๋“œ ๊ณต๋ถ€ (4)
        • โ˜•Java (23)
        • ๐ŸŒณSpring (13)
        • โš™๏ธC (12)
        • โšกPython (13)
        • JavaScript (1)
        • ๐Ÿ›ข๏ธDatabase (0)
        • Algorithm Problem Solving (2)
      • ๐ŸŒ Network (7)
        • ๐Ÿ“œHTTP (7)
      • ๐Ÿš€DevOps (1)
      • โ›บ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ (64)
      • ์ •๋ณด (2)
      • ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ธ€ (2)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • GitHub
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    C ์–ธ์–ด
    ์ปดํ“จํ„ฐ์˜ ์ดํ•ด
    ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ…๊ฐœ๋ก 
    Java
    ์ž๋ฐ”
    ์ปดํŒŒ์ผ๋Ÿฌ
    ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต
    ๋ฐฉ์†ก๋Œ€
    ์œ ๋น„์ฟผํ„ฐ์Šค
    ์ž…์ถœ๋ ฅ
    ๋ฐฉํ†ต๋Œ€
    Python
    C
    spring
    ๋ฐฐ์—ด
    ํ•จ์ˆ˜
    ์ปดํ“จํ„ฐ๊ณผํ•™ ๊ฐœ๋ก 
    C์–ธ์–ด
    ํŒŒ์ด์ฌ
    ์ž๋ฃŒ๊ตฌ์กฐ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.1
junbin2
[C์–ธ์–ด] ๊ตฌ์กฐ์ฒด์™€ ๊ณต์šฉ์ฒด(2)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”