본문 바로가기
Coding/C

C언어 - 함수 포인터

by ZaRi 2023. 5. 28.

 

 저번 변수 범위, 함수, 포인터에 이어 이번에는 함수에 포인터를 활용해보겠습니다.

 


 

함수 포인터

 

함수에서 포인터를 활용할 때 보통 주소를 매개변수로 넘겨주게 됩니다.

먼저 형태를 봐보겠습니다.

 

 

 

함수 형태 ex)
반환형 함수명(포인터 매개변수)
{
    종속절;
    *매개변수;
}
void coin(double* ETH)
{
    (*ETH) += 1000;
함수 쓸 때  
변수 선언;
함수명(변수주소);
double ETH;
coin(&ETH);

 

 위와 같은 형태를 갖게 됩니다. 이렇게 되면 함수에서 그 변수의 주소를 활용할 수 있게 됩니다.

 

 

 

활용하기 1

 먼저 저번 시간에 사용했던 코드를 가져와 활용해보겠습니다.

 

 

#include <stdio.h>

void coin(double ETH) 
{
    ETH += 1000;
}

int main()
{
    double ETH = 5;

    coin(ETH);
    printf("ETH: %.2f", ETH);

    return 0;
}

 

 저번에 이 코드로 결과를 출력했을때는 coin() 함수가 main()함수의 변수 ETH에 영향을 미치지 못해, 그저 5가 출력되었습니다.

 그럼 이번에는 coin() 함수를 ETH의 주소를 받는 형태로 바꾸어보겠습니다.

 

 

 

#include <stdio.h>

void coin(double* ETH)
{
    *ETH += 1000;
}

int main()
{
    double ETH = 5;

    coin(&ETH);
    printf("ETH: %.2f", ETH);

    return 0;
}

 

 그러면 앞서 배운 형태대로, coin(&ETH)로 주소를 넘겨주고 *ETH += 1000; 을 통해 그 주소에 있는 변수에 1000을 더하는 코드를 짜보았습니다.

 

 그럼 이제 출력해보겠습니다.

 

 

 

ETH:1005.00이-출력됨
결과1

 

 그러면 저번 코드와는 다르게 main() 함수에 ETH 값을 성공적으로 바꾸어준 것을 확인할 수 있습니다.

 

 

 

활용하기 2

또한 이를 활용한다면 원래 C언어 함수에서는 return 을 할수 있는 값이 하나 뿐이지만, 이런 포인터로 값을 변경하는 것도 가능하기에 여러개의 값에 영향을 미치는 것도 가능합니다.

 

 

 

#include <stdio.h>

double coin(double* ETH, double* BTC)
{
    *ETH += 1000;
    *BTC += 2000;

    return 100.0;
}

int main()
{
    double ETH = 5;
    double BTC = 50;
    double XRP;

    XRP = coin(&ETH, &BTC);
    printf("ETH: %.2f\n", ETH);
    printf("BTC: %.2f\n", BTC);
    printf("XRP: %.2f\n", XRP);

    return 0;
}

 

 그럼 이렇게 주소를 두 개를 넘겨주게 되면 두 개의 값을 바꾸고 또한 반환 값까지 해서 3개의 값을 바꾸어 줄 수 있게 됩니다. (return은 하나밖에 반환 못함)

 

 그럼 결과를 봐보겠습니다.

 

 

 

ETH:1005.00이-출력됨
ETH:2050.00이-출력됨
ETH:100.00이-출력됨
결과2

 

이렇게 값이 다 할당 된 것을 확인할 수 있습니다.

 

 


 

 오늘은 함수와 포인터에 대해 알아보았습니다. 사실 주소들을 각각 넘겨주는 것은 불편한 일입니다. 그래서 C언어에서는 구조체라는 것을 활용합니다. 그건 다음 글에서 알아보겠습니다.

댓글