๋ฉ๋ชจ๋ฆฌ ์ฃผ์
- ๋ณ์๋ ์ปดํจํฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑ๋๋ค.
- C์ธ์ด์์ ๋ชจ๋ ๋ณ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ผ๋ก, ๊ทธ ์์น๋ฅผ ์๋ณํ ์ ์์ด์ผ ํ๋ค.
- ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ตฌํ๊ธฐ ์ํด์๋ ๋ณ์ ์์ &(์ฃผ์ ์ฐ์ฐ์)๋ฅผ ๋ถ์ธ๋ค.
- ์ฃผ์๋ ํด๋น ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ์ '์์ ์ฃผ์'๋ฅผ ์๋ฏธํ๋ค.
#include <stdio.h>
int main(void)
{
int num = 10;
printf("%p\n", &num);
return 0;
}
์คํ ๊ฒฐ๊ณผ: 00AFF9F4
โถ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ 00AFF9F4์ ๊ฐ์ด 16์ง์ ํํ์ด๋ฉฐ, printf์์ ์์ ์ง์ ์ %p๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๋ ฅํ๋ค.
8์ง์๋ฅผ ์ถ๋ ฅํ๋ %o, 16์ง์๋ฅผ ์ฌ์ฉํ๋ %x๋ ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ ๊ณ ์ ๋ ๊ฒ์ด ์๋๋ผ ์ปดํจํฐ๋ง๋ค, ์คํํ ๋๋ง๋ค ๋ฌ๋ผ์ง๋ค.
- intํ ๋ณ์๋ 4๋ฐ์ดํธ์ด๋ฏ๋ก intํ ๋ณ์ num์ 00AFF9F4๋ฒ์ง์์๋ถํฐ 00AFF9F7๋ฒ์ง๊น์ง ๊ฑธ์ณ์์ต๋๋ค.
- ๋ณ์ num์ด ์ ์ฅ๋๊ธฐ ์์ํ ์ฃผ์ 00AFF9F4๊ฐ ๋ณ์ num์ ์ฃผ์๊ฐ์ด๋ค.
- ์ฃผ์๊ฐ 00AFF9F4 ๋ํ 16์ง์๋ก ์ ์์ด๋ค.
- ๋ฐ๋ผ์ ์ฃผ์๊ฐ๋ ์ ์ฅ์ด ๊ฐ๋ฅํ๊ณ , ์ด ์ฃผ์๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ๋ณ์๊ฐ ๋ฐ๋ก ํฌ์ธํฐ ๋ณ์์ด๋ค.
ํฌ์ธํฐ์ ๊ธฐ๋ณธ ๊ฐ๋
- ํฌ์ธํฐ(pointer)๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๊ฐ์ ์ ์ฅํ๋ ๋ณ์
- *(์ฐธ์กฐ์ฐ์ฐ์)๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธ
- ์๋ฃํ์ ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๊ณ ์ ํ๋ ๋ณ์์ ์๋ฃํ์ ๋ช ์ํ๋ค.
์๋ฃํ * ํฌ์ธํฐ์ด๋ฆ;
- ์ด๊ธฐํํ์ง ์์ ์ฑ๋ก ์ฐธ์กฐ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์๋ํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ ์ฅ์์ ๊ฐ์ ์ ์ฅํ๋ ๊ฒ์ด ๋๋ค.
- ์ด๋ฐ ๊ฒฝ์ฐ๊ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ํฌ์ธํฐ์ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ๋ฅผ ํจ๊ป ํ๋ ๊ฒ์ด ์ข๋ค,
์๋ฃํ * ํฌ์ธํฐ์ด๋ฆ = &๋ณ์์ด๋ฆ;
์๋ฃํ * ํฌ์ธํฐ์ด๋ฆ = ์ฃผ์๊ฐ;
#include <stdio.h>
int main(void) {
int num; // ์ผ๋ฐ ๋ณ์ ์ ์ธ
int * pnum; // ํฌ์ธํฐ ์ ์ธ
pnum = # // ํฌ์ธํฐ์ num ์ฃผ์ ๋์
*pnum = 10; // ํฌ์ธํฐ๋ก ๋ณ์ num์ 10
printf("๋ณ์๋ช
์ผ๋ก num ๊ฐ ์ถ๋ ฅ : %d\n", num);
printf("ํฌ์ธํฐ๋ก num ๊ฐ ์ถ๋ ฅ : %d\n", *pnum);
return 0;
}
์คํ๊ฒฐ๊ณผ
๋ณ์๋ช
์ผ๋ก num ๊ฐ ์ถ๋ ฅ : 10
ํฌ์ธํฐ๋ก num ๊ฐ ์ถ๋ ฅ : 10
โถ ํฌ์ธํฐ๊ฐ ์ด๋ค ๋ณ์์ ์ฃผ์๋ฅผ ์ ์ฅํ ๊ฒฝ์ฐ '๊ฐ๋ฆฌํจ๋ค'๋ผ๊ณ ํ๊ณ , pnum์ด num์ ๊ฐ๋ฆฌํจ๋ค๋ผ๊ณ ๋งํ ์ ์๋ค.
โถ ํฌ์ธํฐ pnum์ด num์ ๊ฐ๋ฅดํค๋ฏ๋ก *pnum์ 10์ ๋์ ํ๋ฉด ๊ฒฐ๊ตญ num์ 10์ ๋์ ํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
์ด์ค ํฌ์ธํฐ
- ์ด์ค ํฌ์ธํฐ(ํฌ์ธํฐ์ ํฌ์ธํฐ) = ํฌ์ธํฐ ๋ณ์๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ ๋ค๋ฅธ ํฌ์ธํฐ ๋ณ์
- ํฌ์ธํฐ๋ฅผ ์ ์ธํ ๋ ** ์ฌ์ฉํ์ฌ ์ด์ค ํฌ์ธํฐ๋ฅผ ์ ์ธ
- ํฌ์ธํฐ๋ฅผ ์ ์ธํ ๋ *์ ๊ฐ์์ ๋ฐ๋ผ์ ์ผ์ค ํฌ์ธํฐ, ์ฌ์ค ํฌ์ธํฐ ๊ทธ ์ด์๋ ๋ง๋ค ์ ์๋ค
์๋ฃํ ** ํฌ์ธํฐ์ด๋ฆ;
#include <stdio.h>
int main(void)
{
int * ptr; // ํฌ์ธํฐ ์ ์ธ
int ** dptr; // ์ด์ค ํฌ์ธํฐ ์ ์ธ
int num = 10;
ptr = # // ํฌ์ธํฐ์ num ์ฃผ์ ๋์
dptr = &ptr; // ์ด์ค ํฌ์ธํฐ์ ptr ์ฃผ์ ๋์
printf("%d\n". **dptr); // ํฌ์ธํฐ๋ฅผ ๋ ๋ฒ ์ญ์ฐธ์กฐํ์ฌ num์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์ ๊ทผ
return 0;
}
์คํ๊ฒฐ๊ณผ
10
โถ dptr์ ptr์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๊ณ , ptr์ num์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค.
๊ทธ๋ ๊ธฐ์ *dptr์ ํฌ์ธํฐ ๋ณ์ ptr์, **dptr์ ๋ณ์ num์ ์๋ฏธํ๊ฒ ๋๋ค.
ํฌ์ธํฐ์ const
- ๋ณ์์ ์ฌ์ฉํ๋ const์๋ ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ฉฐ ํฌ์ธํฐ์ ์ฌ์ฉํ๋ const๋ ์์๋ก ๋ง๋๋ ์ ์ธ์ด ์๋, ํฌ์ธํฐ๋ฅผ ํตํ ๋ณ๊ฒฝ์ ํ์ฉํ์ง ์๋๋ค๋ ์ ์ธ
- const๋ ๋ณ์๋ฅผ ์์ํ์ํค๋ ์ญํ , ํฌ์ธํฐ๊ฐ ์์ํ ๋๋ ๊ฒ์ด์ง ๋ณ์๊ฐ ์์ํ ๋๋ ๊ฒ์ด ์๋๋ค.
- ์ฆ, ๋ณ์ num์ ์ธ์ ๋ ์ง ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋. ํฌ์ธํฐ๋ฅผ ํตํด ๋ณ์ num ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒ๋ง ๋ง์ ์ ์๋ค.
#include <stdio.h>
int main(void)
{
int num = 10;
const int * p = #
*p = 20; โถ ์ปดํ์ผ ์๋ฌ
printf("๋ณ์ num : %d\n", *p);
return 0;
}
#include <stdio.h>
int main(void)
{
int num = 10;
const int * p = #
num = 20; โถ ์ปดํ์ผ ์ฑ๊ณต
printf("๋ณ์ num : %d\n",*p);
return 0;
}
์คํ๊ฒฐ๊ณผ
20
์ถ์ฒ: https://sejong-kr.libguides.com/c.php?g=942235&p=6822366
'ํ๋ก๊ทธ๋๋ฐ > C์ธ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํฌ์ธํฐ & ํจ์ (0) | 2024.08.16 |
---|---|
ํฌ์ธํฐ & ๋ฐฐ์ด (0) | 2024.08.16 |
๋ฐฐ์ด (0) | 2024.08.14 |
ํจ์ (0) | 2024.08.14 |
๋ฐ๋ณต๋ฌธ (0) | 2024.07.31 |