이건 봐도봐도 헷갈려서 자주 써야한다..
개인적으로 자바에서도 그렇고 '리턴'한다는 개념이 헷갈린다. 그냥 자주 쓰고 많이 보는 것밖에 답이 없다.
반환형과 매개변수가 없는 함수는 반환형과 매개변수에 void를 써준다.
#include <stdio.h>
int main(void) { // 반환형이 아닌 매개변수가 void이기 때문에 return을 쓸 수 있는 것.
start(); // 함수의 호출, 반환형과 매개변수 가지지 않기 때문에 '함수명()' 이렇게 호출해야한다.
printf("Program End");
return 0;
}
void start(void) { // 반환형과 매개변수에 void를 작성하면 된다. 대신 return을 사용할 수 없음
printf("Program Start\n");
}
1) 프로그램은 항상 main부터 시작
2) start() 호출
-> start를 호출할 때 start 함수로 가준다. 리턴형이 없고 void를 사용하였으므로 리턴값이 없다. 위 코드에서도 return "Programe Start"(이 형태는 있을 수 없다. 설명을 위해 쓴거다) 가 아니고 print 함수를 써줬다.
반환형은 없지만 매개변수가 존재하는 함수는 return만 안 써주면 된다. 그냥 printf만 써주기!!
#include <stdio.h>
void bang(int x);
int main(void) {
int x;
printf("x를 입력하세요: ");
scanf("%d", x);
bang(3);
bang(x);
bang(x*2);
return 0;
}
void bang(int x) {
int y;
y=2*x+1;
printf("x가 %d일 때, y=%d \n", x, y);
}
반환형이 존재하고 매개변수가 없는 함수
#include <stdio.h>
int multi(void);
int main(void) {
int num;
num=multi();
printf("결과: %d\n", num);
return 0;
}
int multi(void) {
int a, b;
printf("데이터1 입력: ");
scanf("%d", &a);
printf("데이터2 입력: ");
scanf("%d", &b);
return a*b;
}
multi 메소드를 보면 매개변수가 void로 존재하지 않고 반환형은 return a*b로 존재한다. scanf 함수에서 a와 b값을 각각 받은 후에 이 둘의 곱을 리턴한다. 다시 multi함수를 호출한 main함수로 가면 리턴값을 다시 num에 넣어주어 결과적으로 200을 출력하게 되는 것이다!
반환형과 매개변수가 존재하는 함수
#include <stdio.h>
int add(int num1, int num2);
int main(void) {
int sum;
sum=add(3, 2);
printf("3 + 2 = %d\n", add(5,10));
return 0;
}
int add(int num1, int num2) {
int sum;
sum=num1+num2;
return sum;
}
반환형과 매개변수 모두가 존재하는 함수 형태를 많이 봤었다. 이 함수가 딱 함수에만 있는 변수를 사용해서 깔끔하게 계산해주기 때문이다. 또 값은 호출해준 함수에서 지정해줬기 때문에 다양한 값들을 함수에 넣고 돌려볼 수 있다.
위 코드를 보면 add 함수를 호출해주고 add 함수에 전달할 값을 지정해주었다. add 함수를 호출할 때 add 메소드로 가서 num1=3, num2=2로 잠정대입해주어 sum을 계산해주고 이를 또 리턴해준다. 이 함수의 특징은 원하는 때에 원하는 값을 넣어서 리턴 값만 깔끔하게 호출해준다는 장점이 있다.
이렇게 반환형과 매개변수에 대해 공부해봤다. 반환형보다는 함수에 관한 내용도 함께 공부할 수 있었다. 개인적으로 본인은 함수를 잘 사용하지 않고 main 메소드 내에서만 모든 것을 해결하려고 해서 코드도 복잡하고 로딩시간이 오래 걸린 적이 많았다. 하지만 매개변수와 함수의 특성에 대해 더 잘 알게 되어 깔끔한 코드를 짤 수 있을 것 같다.