c์ธ์ด์์ ๋ฐฐ์ด ์ฌ์ฉํ๊ธฐ
C์ธ์ด์์๋ ์๋ฐ์ ๋ฌ๋ฆฌ ์ง์ ์ฃผ์๊ฐ์ ์กฐํํ ์ ์๊ณ ์์ ํ ์๋ ์์ด ์๋ฐ์ ๋ ํผ๋ฐ์ค(reference)(ํฌ์ธํฐ์ ๊ฐ์ ๊ฐ๋ ) ๊ฐ๋ ์ ์ดํดํ๊ธฐ ์ข๋ค.
c์ธ์ด์ ๊ท์น
๋ฐ์ดํฐํ์ ์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ํด์ ธ ์๋ Java์ ๋ฌ๋ฆฌ, c์ธ์ด์์๋ ๋ฉ๋ชจ๋ฆฌ๋ ์ด์์ฒด์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. 16๋นํธ ์ด์์ฒด์ ์์ int๋ 16๋นํธ, 32๋นํธ ์ด์์ฒด์ ์์๋ 32๋นํธ์ด๋ค. ์ด๋ CPU๊ฐ ๋ช ๋นํธ์ธ์ง๋ ์ค์ํ์ง ์๋ค. Java๋ ์ด์์ฒด์ ์ ์๊ด ์์ด ๋ฌด์กฐ๊ฑด 4๋ฐ์ดํธ์ด๋ค.
๋ฆฌ๋ ์ค์์ c์ธ์ด ์์ค์ฝ๋ ์ปดํ์ผํ๊ธฐ
- ์ปดํ์ผํ๊ธฐ
gcc -o hello hello.c
gcc
: gnu ์คํ์์ค ํ๋ก์ ํธ์ ํจํค์ง-o hello
: hello์ด๋ฆ์ผ๋ก ์ปดํ์ผํ๊ธฐhello.c
: ์ปดํ์ผํ ์์ค์ฝ๋
- ์คํํ๊ธฐ:
./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๋ฐ์ดํธ๋ก ๋๋์ด์ง๋ค. ๋ฐฐ์ด์ ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ๋ผ๋ ๊ฒ์ ์ ์ ์๋ค.