์ด์ค ํฌ์ธํฐ(double pointer) : ํฌ์ธํฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
int i = 10; //i๋ intํ ๋ณ์
int *p = &i; //p๋ i๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
int **q = &p; //q๋ ํฌ์ธํฐ p๋ฅผ ๊ฐ๋ฆฌํค๋ ์ด์ค ํฌ์ธํฐ
์ด์ค ํฌ์ธํฐ ์์
#include <stdio.h>
void set_pointer(char **q);
int main(void)
{
char *p;
set_pointer(&p);
printf("์ค๋์ ๊ฒฉ์ธ: %s \n", p);
return 0;
}
void set_pointer(char **q)
{
*q = "All that glisters is not gold.";
}
ํฌ์ธํฐ ๋ฐฐ์ด(array of pointers) : ํฌ์ธํฐ๋ฅผ ๋ชจ์์ ๋ฐฐ์ด๋ก ๋ง๋ ๊ฒ
int * ap [10] ;
1. [] ์ฐ์ฐ์๊ฐ * ์ฐ์ฐ์๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์ผ๋ฏ๋ก ap๋ ๋จผ์ ๋ฐฐ์ด์ด ๋๋ค
2. ์ด๋ค ๋ฐฐ์ด์ด๋ ํ๋ฉด int * (ํฌ์ธํฐ) ๋ค์ ๋ฐฐ์ด์ด ๋๋ค.
3. ํฌ์ธํฐ ํ์ ์ด๊ณ , integer ๋ฐฐ์ด์ ๊ฐ์ง๊ณ ์๋ค.
4. ํฌ์ธํฐ ํ์ ์ ๋ฐฐ์ด์ ๊ฐ์ง๋ integer ๋ฐฐ์ด
์ ์ํ ํฌ์ธํฐ ๋ฐฐ์ด
int a = 10, b = 20, c = 30, d = 40, e = 50;
int *pa[5] = { &a, &b, &d, &e };
2์ฐจ์ ๋ฐฐ์ด์ ๋ฌธ์์ด์ ์ ์ฅ
char fruits[4][10] = {
"apple",
"bluberry",
"orange",
"melon"
};
ํฌ์ธํฐ ๋ฐฐ์ด์ ๋ฌธ์์ด์ ์ ์ฅ
char *fruits[] = {
"apple",
"bluberry",
"orange",
"melon"
};
๋ฐฐ์ด ํฌ์ธํฐ (a pointer to an array) : ๋ฐฐ์ด์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
int ( * pa ) [10] ;
1. ๊ดํธ๊ฐ ์์ผ๋ฏ๋ก pa๋ ๋จผ์ ํฌ์ธํฐ๊ฐ ๋๋ค.
2. ์ด๋ค ํฌ์ธํฐ๋ ํ๋ฉด int [10] ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๊ฐ ๋๋ค.
- ๋ณ๋ก ์ฌ์ฉ๋์ง๋ ์๋๋ค.
ํจ์ ํฌ์ธํฐ (function pointer) : ํจ์๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
int sub(int, int); //ํจ์ ์ํ ์ ์
int (*pf)(int, int); //ํจ์ ํฌ์ธํฐ ์ ์
...
pf = sub; //ํจ์์ ์ด๋ฆ์ ํจ์ ํฌ์ธํฐ์ ๋์
result = pf(10, 20); //ํจ์ ํฌ์ธํฐ๋ฅผ ํตํ์ฌ ํจ์ ํธ์ถ
์์
#include <stdio.h>
#include <stdlib.h>
void(print_equal int a, int b, int (*func) (int, int))
{
if(func(a, b))
printf("Equal\n");
else
printf("Not equal\n");
}
int abs_comp(int a, int b)
{
return abs(a) == abs(b)? 1 : 0;
}
int main()
{
int x = 30;
int y = -30;
printf_equal(x, y, abs_comp);
return 0;
}
#include <stdio.h>
//ํจ์ ์ํ ์ ์
int add(int, int);
int sub(int, int);
int main(void)
{
int result;
int (*pf)(int, int); //ํจ์ ํฌ์ธํฐ ์ ์
pf = add; //ํจ์ ํฌ์ธํฐ์ ํจ์ add()์ ์ฃผ์ ๋์
result = pf(10, 20); //ํจ์ ํฌ์ธํฐ๋ฅผ ํตํ ํจ์ add() ํธ์ถ
printf("10+20์ %d\n", result);
pf = sub; //ํจ์ ํฌ์ธํฐ์ ํจ์ sub()์ ์ฃผ์ ๋์
result = pf(10, 20); //ํจ์ ํฌ์ธํฐ๋ฅผ ํตํ ํจ์ sub() ํธ์ถ
printf("10-20์ %d\n", result);
return 0;
}
ํจ์ ํฌ์ธํฐ์ ๋ฐฐ์ด
int ( *pf[4] ) (int, int) ;
1. [] ์ฐ์ฐ์๊ฐ * ์ฐ์ฐ์๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์ผ๋ฏ๋ก pf๋ ๋จผ์ ๋ฐฐ์ด์ด ๋๋ค
2. ์ด๋ค ๋ฐฐ์ด์ด๋ ํ๋ฉด [i]์์์ i ํฌ์ธํฐ๋ค์ ๋ฐฐ์ด์ด ๋๋ค
3. ์ด๋ค ํฌ์ธํฐ๋ ํ๋ฉด ํจ์๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๊ฐ ๋๋ค.
์์
0๋ฒ์งธ๋ add ํจ์, 1๋ฒ์งธ๋ subํจ์, 2๋ฒ์งธ๋ mulํจ์, 3๋ฒ์งธ๋ divํจ์, 4๋ฒ์งธ๋ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ๋ ํจ์๋ก ๋ง๋ค์ด์,
์ธ๋ฑ์ค์ฒ๋ผ ํ์ฉํ ์๊ฐ ์๋ค.
'C Programming Language > C' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
C์ธ์ด์ ์ ์ถ๋ ฅ๊ณผ ํ์ผ ์คํธ๋ฆผ(stream)์ ๋ํด ์์๋ณด๊ธฐ (1) (0) | 2024.08.12 |
---|---|
C์ธ์ด ํฌ์ธํฐ์ ํ์ฉ : const, volatile, void ํฌ์ธํฐ (0) | 2024.08.12 |
C์ธ์ด ๊ตฌ์กฐ์ฒด union, enum, typedef ๋? (0) | 2024.08.02 |
C์ธ์ด ๊ตฌ์กฐ์ฒด์ ๋ณ์, ๋ฐฐ์ด , ํฌ์ธํฐ, ํจ์ (0) | 2024.08.02 |
C์ธ์ด ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์ (0) | 2024.07.11 |