구성요소
반환(return)
이름(name)
매개변수목록(parameter list) 입력이 여러개일수있음
본체(body) 수행할 연산 집합= 문장 여러 개 본체
반환타입 함수이름( [매개변수목록] )
{
문장1
문장2
문장3
...
[return 계산값-반환되는 값의 타입] ;
}
[이 괄호]의 뜻은 생략가능하다는 뜻
반환 타입
int,float,bool,char,,,+ void(되돌려주는값이없을 때)
함수 이름
변수의 이름 규칙 그대로 적용(특수기호 및 숫자시작불가, 대소문자 구분)
파스칼 표기법 : 모든 단어의 시작이 대문자 MyFunction()
매개변수
매개 변수 목록 : 함수 내부에서 사용할 변수의 선언
0개 : 안써도 됨
1개 : 타입 + 변수명
int x
2개 : 타입 변수명, 타입 변수명
int x , int y
계산식
일련의 프로그램 실해 흐름의 묶음
return : 함수의 실행을 멈추고 일을 시킨 쪽으로 되돌아 감
void 타입의 함수라면 return은(반환값은) 없다
다른 타입이라면 (int 타입의 함수라면 return 10-integer;)
함수 연습해보기
void PrintLine ()
{
//출력 x,입력x 여기서 말하는 출력은 계산결과가 없다는 뜻이다
//다른말로 반환이 없고 , 매개변수가 없는 함수
std::cout << "---------------------" << std::endl;
}
int main()
{
PrintLine(); // 함수를 호출-사용하는 것이다
}
//프로그램 실행 순서 13라인 에서 4라인 쭉 실행되고 다시 13라인으로 되돌아와서 프로그램이 실행됨
//디버그 기능 사용하기 : F11을 사용하면 추적가능하다
void PrintNumber(int x)
{
std::cout << x << std::endl;
//반환값 x 매개변수 0
}
int main()
{
PrintNumber(5); //결과 5 출력
}
함수를 호출하면 함수로 이동하는데 괄호 안 5(값)이 그대로
int x로 전달이 되서 함수의 매개변수로 들어가게 되는 것이다
void PrintNumber(int x) //PrintNumber에 존재하는 x -parameter
{
std::cout << x << std::endl;
//반환값 x 매개변수 0
}
int main()
{
int x{ 1 }; //main에 존재하는 x
PrintNumber(x); -argument
}
// 메모리에 main: x(int타입의 1)
// x의 값인 1이 PrintNumber로 넘어가게서 PrintNumber의 x에 1이 대입되는 것
//r -value가 전달됨 : call by value(값에 의한 호출)
함수를 부르는 쪽 : 위에서는 main을 caller
불러지는 쪽 : callee
caller의 괄호안 x를 인자 : argument
callee의 괄호안 x를 매개변수 : parameter
하지만 실제적으로는 인자와 매개변수를 명확하게 구분하면서 쓰지는 않는다
argument는 그냥 값이고
parameter는 변수로 쓰이는 것
매개변수가 두개라면?
void PrintNumber2(int x,int y) // 매개변수가 2개이상인 경우
{
std::cout << x << "," << y << std::endl;
//반환값 x 매개변수 0
}
int main()
{
int x{ 1 }; //main에 존재하는 x
PrintNumber2(x,5);
}
// 메모리에 main: x(int타입의 1)
// x의 값인 1이 PrintNumber로 넘어가게서 PrintNumber의 x에 1이 대입되는 것
//r -value가 전달됨 : call by value(값에 의한 호출)
int GetLuckyNumber() //반환 타입이 int
{
return 7;
// 반환0,매개변수는x
// return을 만나면 즉시 종료
}
void PrintNumber(int x)
{
}
int main()
{
int lucky{};
lucky = GetLuckyNumber(); //lucky = 7과 같음
GetLuckyNumber(); //caller쪽이 7로 치환되는 결과를 가져옴
std::cout << GetLuckyNumber() << std::endl; // 결과 7
PrintNumber(GetLuckyNumber());
//컴파일러는 오른쪽에서 왼쪽으로 읽어서 가능
//( ):함수호출 연산자
//계산할 때 GetLuckyNumber()계산먼저 해서 치환되고 밖을 계산
}
int Square(int x)
{
int result = x * x;
return result;
// return x*x; 동일함
}
int main()
{
std::cout << Square(7) << std::endl; // 7이 square로 이동후 49로반환
}
문제 : 어디서 출력될까?
void PrintNumber(int x)
{
x = -1000;
std:: cout << x << std::endl;
}
int main()
{
int x{ 1 };
PrintNumber(x);
std::cout << x << std::endl;
}
1이 출력되는 것은 main에서
-1000이 출력되는 것은 PrintNumber에서