-
[C] ํฌ์ธํฐ, malloc()c & c++ 2022. 9. 16. 04:13
๐ก ํฌ์ธํฐ
: ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๋ณ์
: ํฌ์ธํฐ ๋ณ์๋ ์๋ฃํ์ ์๊ด ์์ด ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ ์ธ์ ๋ ๋์ผํ๋ค. <- ๋ชจ๋ 4๋ฐ์ดํธ
cf) ์ง์ด ์๋ ํฌ๋ ์ฃผ์์ ํํ๋ ๋์ผํ๋ค.
ex) ์ซ์, ๋ฌธ์ ์ ์ฅ -> ๋ณ์ ์ ์ธ
์ด๋ค ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์ ์ฅ -> ํฌ์ธํฐ ๋ณ์ ์ ์ธ
โ ์ฃผ์ ์ฐ์ฐ์ &
ํด๋น ๋ณ์์ ์ฃผ์ => &๋ณ์๋ช
* ์ค์ ๋ณ์์ ์ฃผ์ 104== &๋ณ์๋ช ๋์ผํ๋ค.
โ <์ญ์ฐธ์กฐ> ๊ฐ๋ฆฌํค๋ ๋์ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ค. ์ฆ, ๋์ ๋ณ์์ ์ ๊ทผ ํ ์ ์๋ค.
=> ํฌ์ธํฐ ๋ณ์๋ฅผ ํตํด ๊ฐ๋ฆฌํค๋ ๋ณ์์ ๊ฐ์ ์ค์ ํ ์ ์๋ค.
โ ํจ์์ ํจ์ ์ฌ์ด์ ๊ฐ์ ์ฃผ๊ณ ๋ฐ์ ๋ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด ์ฃผ์ ๊ฐ์ ์ ๋ฌํ๋ฉด ๋ณ์์ ์ฃผ์๊ฐ ์ ๋ฌ๋๋ค.
=> ์ฃผ์๋ฅผ ์ ๋ฌ๋ฐ์ ํจ์ ์์์ ํจ์๋ฅผ ํธ์ถํ ๊ณณ์ ๋ณ์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
๐ก ์ฌ์ฉ
1. ํฌ์ธํฐ ๋ณ์๋ฅผ ์ ์ธํ๊ณ ์ ํ ๋
2. ์ญ์ฐธ์กฐ๋ฅผ ํ ๋ ์ฌ์ฉ.
: ์ ์ํ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๋ณ์ b ์ ์ธ => int *b;
ex) int* b = &๋ณ์๋ช (104๋ฒ์ง);
: b๊ฐ 104๋ฒ์ง์ ๋ณ์๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค.
โ ๊ฐ์ ์ฐ์ฐ์ *
: *ํฌ์ธํฐ ๋ณ์๋ฅผ ํตํด ํฌ์ธํฐ ๋ณ์๊ฐ ๊ฐ๋ฆฌํค๋ ๋ณ์์ ๊ฐ์ ์ค์ ํ ์ ์๋ค.
#include <stdio.h> int main() { int a = 10; printf("a >> %d\n", a); // 10 int* b = &a; *b = 20; printf("a >> %d\n", a); // 20 return 0; }
๐ก ์ฌ์ฉ์ด์
โ ๊ฐ์ ์ํ ํธ์ถ Call by Value
: ํจ์ ํธ์ถ์ ํ๋ฉด์ ๊ฐ์ ์ ๋ฌํ๋ ๋ฐฉ์
: main() -> a() -> main() ํจ์๋ก ๋ณ์๋ฅผ ์ ๋ฌํ๋ฉด์ ๋ณ์์ ๊ฐ์ด ๋ณต์ฌ๋๋ค.
, ํจ์๋ ๊ฐ๊ฐ ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ๋ค๋ฅด๋ฏ๋ก ์๋ก์๊ฒ ์ํฅ์ ์ค ์ ์๋ค.
=> ํจ์ ํธ์ถ์ ์ฃผ์๋ฅผ ์ ๋ฌํด ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋๋ก ํ๋ค.
=> ์ฃผ์๋ฅผ ๋๊ฒจ์ค๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ํฌ์ธํฐ ๋ณ์๋ฅผ ์ด์ฉํด์ผํ๋ค.
โ ์ฃผ์์ ์ํ ํธ์ถ Call by Address
: ํจ์์์ ๊ฐ์ด ์๋ ์ฃผ์๋ฅผ ๋ค๋ฅธ ํจ์๋ก ์ ๋ฌํ๋ ๋ฐฉ์
๐ก ํฌ์ธํฐ ๋ฐฐ์ด
: ๋ฉ๋ชจ๋ฆฌ ๋ฐฉ์ ์ฃผ์๋ 1. ์ซ์๋ก 2. ๋ฐฐ์ด ์ด๋ฆ์ผ๋ก ํํํ ์ ์๋ค.
ex) &a[0] ์ฃผ์์ฐ์ฐ์ ์ฌ์ฉ๊ฐ๋ฅ
: ๋ฐฐ์ด์ ์ด๋ฆ == &๋ฐฐ์ด๋ช [0] => ๋ฐฐ์ด์ ์ด๋ฆ์ด์ ๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ์ฃผ์
: ํฌ์ธํฐ๋ฅผ ์ด์ฉํด ์ฒซ๋ฒ์งธ ์ฃผ์ ๋ฟ๋ง ์๋๋ผ ๋ฐฐ์ด์ ์ด๋๋ ์ง ๊ฐ๋ฆฌํค๊ฒ ํ ์ ์๋ค.
=> ํฌ์ธํฐ ์ฃผ์ ๊ฐ ์ฐ์ฐ +1์ ์ฆ๊ฐ๊ฐ ์๋๋ผ ๋ฐฐ์ด ํ ์นธ ๋ฐ์ดํธ ํฌ๊ธฐ๋ฅผ ์๋ฏธ.
: ํฌ์ธํฐ๋ ๋ณ์๋ค, ๋ณ์๋ ๋ฐฐ์ด๋ก ๊ตฌ์ฑํ ์ ์๋ค.
ex) int* a[2];
: ๋ฌธ์์ด ์ฒ๋ฆฌํ ๋ ์์ฃผ ์ฌ์ฉ
๐ก ํฌ์ธํฐ์ ํฌ์ธํฐ **
: ํฌ์ธํฐ ๋ณ์์ ์ฃผ์๋ฅผ ์ ์ฅ
๐ก ๋ฌธ์์ด ์ ์ฅ
1. ๋ฌธ์ ๋ฐฐ์ด ์ด์ฉ char a[10] = "Hello";
2. ๋ฌธ์ ์๋ฃํ ํฌ์ธํฐ ๋ณ์ ์ด์ฉ char* a = "Hello";
=> ํฌ์ธํฐ ๋ณ์๋ ๋ฐํ๋๋ ์ฃผ์๋ฅผ ํ ๋น ๋ฐ์ ๋ฌธ์์ด์ด ์ ์ฅ๋ ์์น๋ฅผ ๊ธฐ์ตํ๋ ๊ฒ
3. ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
๐ก ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
: ๊ทธ๋ ๊ทธ๋ ์ํฉ์ ๋ฐ๋ผ ๋ณ๊ฒฝ ๊ฐ๋ฅํ.
: ์ ์ ์ผ๋ก ๋ฏธ๋ฆฌ ์ ํด์ ธ ์์ง ์๊ณ , ๋์ ์ผ๋ก ๊ฒฐ์ ๋๋ค.
== ์ฆ ์ฝ๋๊ฐ ์ํ๋๋ฉด์ ์ํฉ์ ๋ฐ๋ผ ๊ทธ๋ ๊ทธ๋ ํ์ํ ํฌ๊ธฐ๋งํผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ์ ์ฌ์ฉํ๋ค.
: malloc() ํจ์๊ฐ ๋๋ main() ํจ์๋ก ๋์ด๊ฐ๋ ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ๋ ์ฌ๋ผ์ง์ง ์๋๋ค.
โ malloc() ํจ์์ด์ฉ + free(ํฌ์ธํฐ ๋ณ์)
: #include <stdlib.h> ํค๋ํ์ผ
: ์ํ๋ ๋ฐ์ดํธ ์๋งํผ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น ๋ฐ๋๋ค.
: ๊ฒฐ๊ณผ ๊ฐ์ผ๋ก ํ ๋น ๋ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ฅผ ๋ฐํ. == ํจ์๋ฅผ ํธ์ถํ ๊ณณ์ ๊ฒฐ๊ณผ๋ก ํ ๋น ๋ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ฅผ ์ ๋ฌํ๋ค.
โ free(ํฌ์ธํฐ ๋ณ์)
: ํ ๋น ๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํ malloc() ํจ์๋ก ํ ๋น ๋ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์คํ ์ ๋ฐํํ๋ค.
'c & c++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C] ๊ธฐํธ ์์ (0) 2022.09.18 [C] ๊ตฌ์กฐ์ฒด, ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด, ์ฐ๊ฒฐ ๋ฆฌ์คํธ (0) 2022.09.16 [C] ํจ์, static, ๋ฐฐ์ด (0) 2022.09.14 [C] ๋ฐ๋ณต๋ฌธ , ์กฐ๊ฑด๋ฌธ (0) 2022.08.06 [C] ๊ธฐ์ด, ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ์ (0) 2022.08.02