C Programming Language/C

C์–ธ์–ด ํฌ์ธํ„ฐ์˜ ํ™œ์šฉ : ์ด์ค‘ ํฌ์ธํ„ฐ, ํฌ์ธํ„ฐ ๋ฐฐ์—ด, ํ•จ์ˆ˜ ํฌ์ธํ„ฐ

567Rabbit 2024. 8. 2. 16:55

 

์ด์ค‘ ํฌ์ธํ„ฐ(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๋ฒˆ์งธ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•˜๋Š” ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด์„œ,

์ธ๋ฑ์Šค์ฒ˜๋Ÿผ ํ™œ์šฉํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.