์ด ๊ธ์ Boostcourse ๋ชจ๋๋ฅผ ์ํ ์ปดํจํฐ ๊ณผํ์ ์๊ฐํ๊ณ ์์ฑ๋์์ต๋๋ค.
C๋ก ์์ฑ๋ ๋ณ์๋ ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ป๊ฒ ์ ์ฅ๋ ๊น? ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ๋ ์ ๋ณด๋ฅผ byte๋จ์๋ก ์ ์ฅํ๊ณ , ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ byte๋ 16์ง์๋ก ํํ๋ ๊ณ ์ ํ ์ซ์๊ฐ์ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค. 16์ง์๋ 2์ง์๋ก ๊ฐ๋จํ๊ฒ ๋ํ๋ผ ์ ์๋ค. 2์๋ฆฌ์ 16์ง์๋ 1byte(=8bit)์ 2์ง์๋ก ๋ณํ๋๊ธฐ ๋๋ฌธ์ ์ ๋ณด๋ฅผ ํํํ๊ธฐ ์ ์ฉํ๋ค!
C์ธ์ด์์ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ฅผ ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
int n = 50;
printf("%p",&n); // n์ ์ฃผ์ ์ถ๋ ฅ
printf("%i",*&n); // n๊ฐ ์ถ๋ ฅ
&
: ๋ณ์ ์์ &
์ ๋ถ์ด๋ฉด ๋ณ์์ ์ฃผ์๊ฐ ๋๋ค%p
: ์ฃผ์์ ํ์์ง์ ์*
: ํด๋น ์ฃผ์๋ก ๊ฐ์ ๊ฐ์ ๋ฐ์์จ๋คํฌ์ธํฐ(pointer)๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๋ค๋ฅธ ๋ณ์, ํน์ ๊ทธ ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ณ์๋ฅผ ๋งํ๋ค. -์ํค๋ฐฑ๊ณผ -
๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ณ์๋ฅผ ํฌ์ธํฐ๋ผํ๊ณ , ํฌ์ธํฐ๋ ๋ณ์ ์์*
๋ฅผ ๋ถ์ฌ ์ ์ํ๋ค.
int main(void)
{
int n = 50;
int *p = &n; // p๋ int์๋ฃํ์ ๋ณ์๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
printf("%p\n", p);
printf("%i\n", *p);
}
n๊ณผ p๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ ํํ๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํํ๋๋ค.
์ด๋ ๊ณง "p๊ฐ 50์ ๊ฐ๋ฆฌํค๊ณ ์๋ค"๊ณ ์ถ์์ ์ผ๋ก ์ดํดํ ์ ์๋ค.
string์ C์ธ์ด์์ ์กด์ฌํ์ง ์๋๋ค. (CS50 ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ typedef๋ก ์ ์ํ ๋ฌธ์์ด์ ์ง๊ธ๊ป ๋น๋ ค์จ์๋ ๊ฒ) string, ๋ฌธ์์ด์ ์ค์ ๋ก ๋ฌธ์์ด์ ์ฒซ ๊ธ์์ ์ฃผ์์ ํฌ์ธํฐ๋ก, ํด๋น ๋ฌธ์์ด์ ์ฝ์ด์ค๋ ๊ฒ์ด์๋ค.
์ค์ C์์๋ ํฌ์ธํฐ๊ฐ "char ๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ๋ฌธ์๊ฐ ์ ์ฅ๋ ์ฃผ์"๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ๋ฌธ์์ด์ ์ฌ์ฉํ๋ค.
int main(void)
{
char *s = "EMMA";
printf("%s\n", s);
}
์ถ๋ ฅ > EMMA
s๋ "EMMA"์ค "E"์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅํ๊ณ , printfํจ์๋ s๊ฐ ๊ฐ๊ธฐ๋ฆฌํค๋ "E"๋ถํฐ NULL์ข
๋จ๋ฌธ์๊น์ง๋ฅผ ์ถ๋ ฅํ๋ค.
๋ฐ๋ผ์ NULL์ข
๋จ๋ฌธ์๋ string์ ๋์์ ์๋ฆฌ๋ ์ญํ ์ ํจ์ผ๋ก ๋งค์ฐ ์ค์ํ๋ค ํ ์ ์๋ค.