C์ธ์ด์ ๋ํด ๊ณต๋ถํ๋ค ๋ณด๋ ์ด์ํ ๋ฌธ๋ฒ๊ณผ ์ต์ํ์ง ์์ ๋ฌธ๋ฒ๋ค์ด ํผ์ฆ์ฒ๋ผ ๋ค๊ฐ์ค๊ณค ํ๋ค.
๊ทธ๋ผ์๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ์ธ์ด์ด๊ธฐ๋ ํ๊ณ , ๋ถ๋ช ๋์์ด ๋๋ ๋ถ๋ถ๋ ๋ง๋ค.
์ง๊ธ๋ถํฐ ๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถํ๋ฉฐ, ํท๊ฐ๋ ธ๋ ๊ฐ๋ ์ ๋ํด ์ ๋ฆฌ๋ณด๊ณ ์ ํ๋ค.
์๋ ํ ๋น ๋ฌธ์์ด์ด๋?
ํฐ ๋ฐ์ดํ๋ก ๋๋ฌ์ธ์ธ ๋ฌธ์์ด์ด๋ค.
๋จ, char ๋ฐฐ์ด ์ ์ธํ ๋ ์ด๊ธฐํ ๊ฐ์ผ๋ก ์ฐ์ด๋ ๊ฒฝ์ฐ๋ ์ ์ธํ๋ค.
char * str = "Oh String";
์ ๊ตฌ๋ฌธ ๊ฐ์ด ๋ฌธ์์ด์ ํํํ ๋ ์๋ ํ ๋น ๋ฌธ์์ด์ด ์ฐ์ธ๋ค.
์ด ๋ฌธ์์ด์ ๋ณํํ ์ ์๋ค(๋ถ๋ณ).
์ ๋ถ๋ณ์ธ๊ฐ?
์ด๋ Const์ ๋ํด ์ดํดํ ํ์๊ฐ ์๋ค.
ํฌ์ธํฐ์ Const ์ ์ธ
ํฌ์ธํฐ(*)์ const๋ ์์น์ ๋ฐ๋ผ ์ฌ์ฉ ์๋ฏธ๊ฐ ๋ค๋ฅด๋ค.
1. const int * ptr
ํด๋น ํฌ์ธํฐ๋ฅผ ํตํด ๊บผ๋ด์ฌ ๊ฐ์ ๋ณ๊ฒฝ๋ ์ ์๋ค๋ ๋ป์ด๋ค.
int num = 5;
const int * ptr1 = #
// ์ค๋ฅ ๋ฐ์
*ptr = 30;
// ์ฑ๊ณต
num = 40;
์ ์ฒ๋ผ const๊ฐ ๋จผ์ ๋์ค๊ณ ํฌ์ธํฐ๊ฐ ๋์ค์ ๋์ค๋ฉด ํฌ์ธํฐ๋ฅผ ํตํด ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
๋ฐ๋ฉด, ํฌ์ธํฐ ์๊ธฐ ์์ ์ ๋ฐ๊พธ๋ ๊ฒ์ ๊ฐ๋ฅํ๋ค.(=๋ค๋ฅธ ์ฃผ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ)
const int num1 = 5;
const int num2 = 10;
const int * ptr = &num1;
ptr = &num2;
์ด๋, ์์๋ก ์ ์ธ๋ ๊ฐ์ ์ฃผ์๋ฅผ ๋ถ๋ฌ๋ค์ด๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์ ์ํ์.
๊ฐ๋ง ๋ณด๋ ์ฃผ์ ์์ฒด๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ ๊ฐ๋ฅํ๋ฐ, ํฌ์ธํฐ๋ฅผ ํตํ ๊ฐ์ ๋ณ๊ฒฝ์ ์ ํ๋๋ค.
์ฌ๊ธฐ์ ์ง์๊ฐ๋ฅํ ๊ฒ์ด ์๋ ํ ๋น ๋ฌธ์์ด๊ณผ์ ๊ด๊ณ์ด๋ค.
์๋ ํ ๋น ๋ฌธ์์ด์ const char *๋ก ์ฐ์ธ๋ค.
๊ฐ์ ํ๋ ํ๋ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
2. int * const ptr
๋ ๋ฒ์งธ, ํฌ์ธํฐ๊ฐ ๋จผ์ ๋์ค๊ณ const๊ฐ ๋ค์ ๋์ฌ ๋๋ค.
์ด๋ ํฌ์ธํฐ์ ์ ์ฅ๋ ์ฃผ์ ๊ฐ ์์ฒด๊ฐ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ ๋ป์ ๊ฐ์ง๋ค.
๋ฐ๋๋ก ํฌ์ธํฐ๋ฅผ ํตํด ์ป์ ๊ฐ์ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.(=๊ฐ ํ๋ ํ๋๊ฐ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค๋ ๋ป)
int num1 = 5;
int * const ptr2 = &num1;
ptr2 = ptr1; // ๋ถ๊ฐ๋ฅ
ptr2 = ptr2 + 1; // ๋ถ๊ฐ๋ฅ
ptr2 = &num2; // ๋ถ๊ฐ๋ฅ
*ptr = 10; // ๊ฐ๋ฅ
๊ฐ ํ๋ ํ๋ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ผ๋, ์ฃผ์ ์์ฒด๋ฅผ ๋ฐ๊พธ์ง ๋ชปํ๋ค.
์ฆ, int arr[]์ด๋ค.
์ผ๋ฐ์ ์ธ ๋ฐฐ์ด์ด ๋ฐ๋ก int * const์ธ ๊ฒ์ด๋ค.(ํฌ์ธํฐ ๋ค์ const)
'๐ซ Language > C' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C/C++] typedef, union, enum ํด์ํ๊ธฐ (0) | 2023.06.19 |
---|---|
[C/C++] malloc๊ณผ Stack๊ณผ Heap์ ๊ด๊ณ (1) | 2023.06.18 |
[C/C++] ํฌ์ธํฐ ๋ฐฐ์ด ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด ํฌ์ธํฐ (0) | 2023.06.18 |