๐คนโ๏ธ ์ฌ๋ฌ๊ฐ์ง ํฌ์ธํฐ
1๏ธโฃ ํฌ์ธํฐ์ ๊ธฐ๋ณธ ๊ฐ๋ โจ
ํฌ์ธํฐ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๋ณ์๋ก, ๋ณ์๋ ํจ์๋ฅผ ๊ฐ์ ์ ์ผ๋ก ์ฐธ์กฐํ๊ฑฐ๋ ์กฐ์ํ๋๋ฐ ์ฌ์ฉ๋๋ค.
ํฌ์ธํฐ์ ๊ฐ๋ ์ ์ดํดํ๊ธฐ ์ํด ๋จ์ผ ํฌ์ธํฐ๋ถํฐ ์ ๋ฆฌํ๋ค.
*๋จ์ผ ํฌ์ธํฐ
ํฌ์ธํฐ ๋ณ์๋ *๊ธฐํธ๋ก ํํํ๊ณ , ๋ณ์์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ค.
int a = 5;
int *p;
p = &a;
2๏ธโฃ ํฌ์ธํฐ์ ํฌ์ธํฐ โจ
**์ด์ค ํฌ์ธํฐ๋
์ด์ค ํฌ์ธํฐ๋ ๋ณ์์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๋ณ์๋ก, ์ด๋ฅผ ํตํด ๋ค์ค ๊ฐ์ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๋ค.
int **pp;
3๏ธโฃ voidํ ํฌ์ธํฐ โจ
voidํ ํฌ์ธํฐ์ ๊ธฐ๋ณธ ๊ฐ๋
voidํ ํฌ์ธํฐ๋ ์ด๋ค ์๋ฃํ์ ์ฃผ์๋ ๊ฐ๋ฆฌํฌ์ ์๋ ํฌ์ธํฐ๋ก, ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๋ ๋ฐ์ดํฐ ํ์์ ๋ํ ์ ๋ณด๊ฐ ์๋ค.
void *ptr;
voidํ ํฌ์ธํฐ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅํ์ง๋ง ํด๋น ์ฃผ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ ํ์ ์ ์์ ์๋ค.
voidํ ํฌ์ธํฐ ์ฌ์ฉ ์์
int num = 10;
void *ptr;
ptr = #
voidํ ํฌ์ธํฐ prt์ ์ ์ํ ๋ณ์ num์ ์ฃผ์๋ฅผ ์ ์ฅํ๊ณ ์๋ค.
์ ์ฝ๋๋ voidํ ํฌ์ธํฐ์ธ a๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํ ๋ณ์ b์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค.
๊ทธ๋ฌ๋ voidํ ํฌ์ธํฐ๋ ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๊ฐ์ ํด์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ์ ์ ๋ณด๊ฐ ์์ผ๋ฏ๋ก ์ฃผ์๋ฅผ ํตํด ์ค์ ๊ฐ์ ์ฝ๊ฑฐ๋ ์ฌ์ฉํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.
์ฌ๊ธฐ์ printf("%d\n", *ptr); ์ ๋ถ๋ถ์ ์๋ชป๋ ๋ถ๋ถ์ด๋ค. voidํ ํฌ์ธํฐ์ธ ptr์ ์ญ ์ฐธ์กฐํ์ฌ ๊ฐ์ ์ถ๋ ฅํ๋ ค๊ณ ํ์ผ๋, ์ด๋ ์๋ชป๋ ๋ฐฉ๋ฒ์ด๋ค. voidํ ํฌ์ธํฐ๋ ์ฃผ์๋ง ๊ฐ์ง๊ณ ์๊ณ ๊ทธ ์ฃผ์์ ์ด๋ค ๋ฐ์ดํฐ ํ์ ์ด ์ ์ฅ๋์ด ์๋์ง์ ๋ํ ์ ๋ณด๊ฐ ์๊ธฐ ๋๋ฌธ์ ํด๋น ์ฃผ์์ ์ ์ฅ๋ ๊ฐ์ ๋ฐ๋ฅด๊ฒ ํด์ํ ์ ์๋ค.
๋ฐ๋ผ์ ์ด ์ฝ๋๋ ์ปดํ์ผ ์ค๋ฅ๋ฅผ ๋ฐ์ํ๊ฑฐ๋, ์คํ ์์ ์๊ธฐ์น ์์ ๋์์ ์ผ์ผํฌ์ ์๋ค.
๐ก ์ ๋ฆฌํ์๋ฉด:
- voidํ ํฌ์ธํฐ๋ ์ด๋ค ํ์ ์ ์ฃผ์๋ผ๋ ์ ์ฅํ ์ ์์ง๋ง, ํด๋น ์ฃผ์์ ๊ฐ์ ์ง์ ์ญ์ฐธ์กฐํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
- voidํ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ชฉ์ ์ ๋ค์ํ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ผ๊ด๋๊ฒ ๋ค๋ฃจ๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ๋ฌํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
- ๋ฐ๋ผ์ voidํ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ ๋์๋ ์ ์ ํ ํ๋ณํ์ ํตํด ์ํ๋ ํ์ ์ผ๋ก ๋ณํํ์ฌ ์ฌ์ฉํด์ผ ํ๋ค.
์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ ํ๋ฉด ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋ค.
voidํ ํฌ์ธํฐ์ธ ptr์ intํ ํฌ์ธํฐ๋ก ํ๋ณํํ ํ์ ์ญ์ฐธ์กฐํ์ฌ ๊ฐ์ ์ถ๋ ฅํ๊ณ ์๋ค. ์ด๋ ๊ฒ ํ๋ฉด ptr์ด ๊ฐ๋ฆฌํค๋ ์ฃผ์์ ์ ์ฅ๋ ๊ฐ 10์ ์ฌ๋ฐ๋ฅด๊ฒ ์ถ๋ ฅํ ์ ์๋ค.
4๏ธโฃ ํจ์ ํฌ์ธํฐโจ
ํจ์ ํฌ์ธํฐ์ ์ ์ธ
ํจ์ ํฌ์ธํฐ๋ ํน์ ํจ์์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๋ณ์๋ก, ํจ์ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค.
int (*func)(int a); // ์๋ฃํ(*ํจ์ํฌ์ธํฐ ์ด๋ฆ)(์ธ์ ๋ชฉ๋ก)
์ด๋ ๊ฒ ํจ์๋ช ์์ *์ ๋ถ์ฌ์ฃผ๋ฉด ํจ์ ํฌ์ธํฐ๊ฐ ์ ์ธ๋๋ค. ํจ์ ํฌ์ธํฐ๋ ํฌ์ธํฐ์ด๋ฏ๋ก ์ฃผ์๊ฐ์ ์ ์ฅํ๋ค.
ํจ์ ํฌ์ธํฐ ์ฌ์ฉ ์ด์
์ง์ ํจ์๋ฅผ ํธ์ถํ๋ ๋์ ํจ์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ปดํ์ผ ํ์ ๋๋ ๋ฐํ์์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ ๋ฐ ์์น๊ฐ ๊ฒฐ์ ๋๋ค.
- ์ด๋ฅผ ์ ์ ๋ฐ์ธ๋ฉ๊ณผ ๋์ ๋ฐ์ธ๋ฉ์ด๋ผ๊ณ ํ๋ค.
- ํนํ ๋์ ๋ฐ์ธ๋ฉ์ ํ๋ก๊ทธ๋จ์ ํ์ ์ฑ๊ณผ ์ ์ฉ์ฑ์ ๋์ผ์ ์๋ค.
๐ ์์ ์ฝ๋์ ์ฌ์ฉ ๋ชฉ์
์๋๋ ํจ์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ ์์ ์ฝ๋์ด๋ค. ์ด ์ฝ๋๋ ํจ์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์๋ฅผ ๋ํ๊ฑฐ๋ ๋บด๋ ๊ธฐ๋ฅ์ ์ํํ๋ค. ์ด๋ฅผ ํตํด ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ๋ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์์์ ๋ณด์ฌ์ค๋ค.
#include <stdio.h>
int Plus(int a, int b)
{
return a + b;
}
int Minus(int a, int b)
{
return a - b;
}
void main()
{
int x, y;
int (*fptr)(int a, int b);
printf("๋ ์ ์๋ฅผ ์
๋ ฅํ์ธ์.");
scanf_s("%d%d", &x, &y);
fptr = Plus;
int res = fptr(x, y);
printf("๋ง์
๊ฒฐ๊ณผ = %d\n", res);
fptr = Minus;
res = fprt(x,y);
printf("๋บ์
๊ฒฐ๊ณผ = %d\n", red);
}
5๏ธโฃ NULL ํฌ์ธํฐโจ
NULL ํฌ์ธํฐ์ ๊ฐ๋
NULL ํฌ์ธํฐ๋ ์๋ฌด๊ฒ๋ ๊ฐ๋ฆฌํค์ง ์๋ ํฌ์ธํฐ๋ฅผ ์๋ฏธํ๋ค. ์ฆ, ํฌ์ธํฐ์๋ ์ด๋ ํ ์ฃผ์๊ฐ๋ ํ ๋น๋์ด ์์ง์๋ค.
ํฌ์ธํฐ ๋ณ์ ptr์ ํ์ฌ ์๋ฌด ๊ฒ๋ ๊ฐ๋ฆฌํค๊ณ ์์ง ์๋ค.
int *ptr = NULL;
๐ ์์ ์ฝ๋์ ์ฌ์ฉ ๋ชฉ์
์ค๋ฌด์์๋ ํจ์์ ๋์ ์๋ฌ๋ฅผ ์ฒดํฌํ๋ ์ฉ๋๋ก ์ฃผ๋ก ์ฌ์ฉ๋๋ค. ํนํ, ํฌ์ธํฐ ๋ณ์๋ฅผ ๋ฐ๋ ํจ์๋ฅผ ํธ์ถํ ๋๋ ๋ฌด์กฐ๊ฑด NULL๊ฐ์ ์ฒดํฌํด์ผํ๋ค.
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "Love";
char* p;
p = strchr(str, 'v');
if(p != NULL)
{
*p = 'b';
printf("๋ณ๊ฒฝ ๊ฒฐ๊ณผ: %s\n", str);
}
else
{
printf("NULL์ ๋ฆฌํดํ์์ต๋๋ค.\n");
}
return 0;
}
์ ์ฝ๋์์๋ strchrํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ 'v'๋ฌธ์๋ฅผ ์ฐพ๊ณ , ํด๋น ์์น๋ฅผ ํฌ์ธํฐ p์ ํ ๋นํ๋ค. ๊ทธ ํ p๊ฐ NULL์ด ์๋๊ฒฝ์ฐ์๋ง ๋ฌธ์๋ฅผ ๋ณ๊ฒฝํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ strchrํจ์๊ฐ NULL์ ๋ฆฌํดํ๋ฉด "NULL์ ๋ฆฌํดํ์์ต๋๋ค." ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ค. ์ด๋ฅผ ํตํด ์์์น ๋ชปํ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๋ค. ๋ฐ๋ผ์ ํฌ์ธํฐ๋ฅผ ๋ค๋ฃฐ ๋๋ ์ธ์ ๋ NULL์ฒดํฌ๋ฅผ ์์ง ๋ง์์ผํ๋ค.