Posts ๐Ÿต ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์™€ ๋ฐฐ์—ด feat. C์–ธ์–ด
Post
Cancel

๐Ÿต ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์™€ ๋ฐฐ์—ด feat. C์–ธ์–ด

c์–ธ์–ด์—์„œ ๋ฐฐ์—ด ์‚ฌ์šฉํ•˜๊ธฐ

C์–ธ์–ด์—์„œ๋Š” ์ž๋ฐ”์™€ ๋‹ฌ๋ฆฌ ์ง์ ‘ ์ฃผ์†Œ๊ฐ’์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜๋„ ์žˆ์–ด ์ž๋ฐ”์˜ ๋ ˆํผ๋Ÿฐ์Šค(reference)(ํฌ์ธํ„ฐ์™€ ๊ฐ™์€ ๊ฐœ๋…) ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ธฐ ์ข‹๋‹ค.

c์–ธ์–ด์˜ ๊ทœ์น™

๋ฐ์ดํ„ฐํƒ€์ž…์— ๋”ฐ๋ผ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋Š” Java์™€ ๋‹ฌ๋ฆฌ, c์–ธ์–ด์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ์šด์˜์ฒด์ œ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค. 16๋น„ํŠธ ์šด์˜์ฒด์ œ์—์„œ int๋Š” 16๋น„ํŠธ, 32๋น„ํŠธ ์šด์˜์ฒด์ œ์—์„œ๋Š” 32๋น„ํŠธ์ด๋‹ค. ์ด๋•Œ CPU๊ฐ€ ๋ช‡ ๋น„ํŠธ์ธ์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค. Java๋Š” ์šด์˜์ฒด์ œ์— ์ƒ๊ด€ ์—†์ด ๋ฌด์กฐ๊ฑด 4๋ฐ”์ดํŠธ์ด๋‹ค.

๋ฆฌ๋ˆ…์Šค์—์„œ c์–ธ์–ด ์†Œ์Šค์ฝ”๋“œ ์ปดํŒŒ์ผํ•˜๊ธฐ

  1. ์ปดํŒŒ์ผํ•˜๊ธฐ gcc -o hello hello.c
    • gcc: gnu ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์˜ ํŒจํ‚ค์ง€
    • -o hello: hello์ด๋ฆ„์œผ๋กœ ์ปดํŒŒ์ผํ•˜๊ธฐ
    • hello.c: ์ปดํŒŒ์ผํ•  ์†Œ์Šค์ฝ”๋“œ
  2. ์‹คํ–‰ํ•˜๊ธฐ: ./hello

์ฃผ์†Œ๋ฅผ ๋‹ด๋Š” ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ: ๋ฐฐ์—ดX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <stdlib.h>
// ๋ ˆํผ๋Ÿฐ์Šค
int main() {
  int i1, i2, i3;
  i1 = 100;
  i2 = 200;
  i3 = 300;
  
  // ์ฃผ์†Œ๋ฅผ ๋‹ด๋Š” ๋ณ€์ˆ˜ = ํฌ์ธํ„ฐ(pointer)
  int* p;
  
  //i1์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’์ด ์•„๋‹ˆ๋ผ i1 ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๋ฅผ ์ด ์ž๋ฆฌ์— ๋„ฃ์–ด๋ผ.
  p = &i1;
  //p์— ๋“ค์–ด์žˆ๋Š” ์ฃผ์†Œ๋กœ ์ฐพ์•„๊ฐ€์„œ ๊ทธ ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ผ.
  printf("%d(%x) --> %d\n", p, p, *p);	//-1290692204(b3119994) --> 100
  
  p= &i2;
  printf("%d(%x) --> %d\n", p, p, *p);	//852309736(32cd36e8) --> 200
  
  p = &i3;
  printf("%d(%x) --> %d\n", p, p, *p);	//-1382156852(ad9df5cc) --> 300
  
  *p = 500;
  printf("%d\n", i3);					//500
  
  return 0;
}

์—ฌ๊ธฐ์„œ ๋ณ€์ˆ˜ p๋Š” ์ฃผ์†Œ๋ฅผ ๋‹ด๋Š” ๋ณ€์ˆ˜๋กœ, C์–ธ์–ด์—์„œ๋Š” ์ด๋ฅผ ํฌ์ธํ„ฐ(pointer)๋ผ ๋ถ€๋ฅธ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฒซ๋ฒˆ์งธ ๋ฐ”์ดํŠธ์˜ ์ฃผ์†Œ์ด๋‹ค.

์ฃผ์†Œ๋ฅผ ๋‹ด๋Š” ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ: ๋ฐฐ์—ดO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  int i[3];
  i[0] = 100;
  i[1] = 200;
  i[2] = 300;
  
  printf("%d, %d, %d\n", i[0], i[1], i[2]);

  p = &i[0];
  printf("%d\n", p, *p);	//-290063748, 100

  p = &i[1];
  printf("%d\n", p, *p);	//-290063752, 200

  p = &i[2];
  printf("%d\n", p, *p)		//-290063756, 300

์ฃผ์†Œ๊ฐ’์„ ์ถœ๋ ฅํ•ด๋ณด๋ฉด ๊ฐ๊ฐ์˜ ์ธ๋ฑ์Šค๋Š” int์˜ ๋‹จ์œ„์ธ 4๋ฐ”์ดํŠธ๋กœ ๋‚˜๋ˆ„์–ด์ง„๋‹ค. ๋ฐฐ์—ด์€ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

This post is licensed under CC BY 4.0 by the author.

ํ•™์› #10์ผ์ฐจ: Java ๊ธฐ์ดˆ๋ฌธ๋ฒ• ํ”„๋กœ์ ํŠธ

ํ•™์› #11์ผ์ฐจ: ๋ฐฐ์—ด, ์ธ์Šคํ„ด์Šค์™€ ๋ ˆํผ๋Ÿฐ์Šค, ๊ฐ€๋น„์ง€

Loading comments from Disqus ...