저번 변수 범위, 함수, 포인터에 이어 이번에는 함수에 포인터를 활용해보겠습니다.
함수 포인터
함수에서 포인터를 활용할 때 보통 주소를 매개변수로 넘겨주게 됩니다.
먼저 형태를 봐보겠습니다.
함수 형태 | ex) |
반환형 함수명(포인터 매개변수) { 종속절; *매개변수; } |
void coin(double* ETH) { (*ETH) += 1000; |
함수 쓸 때 | |
변수 선언; 함수명(변수주소); |
double ETH; coin(Ð); |
위와 같은 형태를 갖게 됩니다. 이렇게 되면 함수에서 그 변수의 주소를 활용할 수 있게 됩니다.
활용하기 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(Ð);
printf("ETH: %.2f", ETH);
return 0;
}
그러면 앞서 배운 형태대로, coin(Ð)로 주소를 넘겨주고 *ETH += 1000; 을 통해 그 주소에 있는 변수에 1000을 더하는 코드를 짜보았습니다.
그럼 이제 출력해보겠습니다.
그러면 저번 코드와는 다르게 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(Ð, &BTC);
printf("ETH: %.2f\n", ETH);
printf("BTC: %.2f\n", BTC);
printf("XRP: %.2f\n", XRP);
return 0;
}
그럼 이렇게 주소를 두 개를 넘겨주게 되면 두 개의 값을 바꾸고 또한 반환 값까지 해서 3개의 값을 바꾸어 줄 수 있게 됩니다. (return은 하나밖에 반환 못함)
그럼 결과를 봐보겠습니다.
이렇게 값이 다 할당 된 것을 확인할 수 있습니다.
오늘은 함수와 포인터에 대해 알아보았습니다. 사실 주소들을 각각 넘겨주는 것은 불편한 일입니다. 그래서 C언어에서는 구조체라는 것을 활용합니다. 그건 다음 글에서 알아보겠습니다.
댓글