C++/C++입문

[C++] 11. 함수와 변수

나는야 개발자 2025. 4. 10. 07:26
반응형

▶ 이전강의

- 바로가기

 

[C++] 10. 이중포인터

▶ 이전강의- 바로가기 [C++] 9. Char, 구조체, void 포인터▶ 이전강의- 바로가기 [C++] 8. 배열과 포인트 연산▶ 이전강의- 바로가기 [C++] 7. 포인터▶ 이전강의- 바로가기 [C++] 6. TextRPG 레벨업 시스

lhy-info.tistory.com

 

1. 함수란?

- 기능을 만들어 준다.

- 일종의 사용할 수 있는 부품이라 본다.

 

▶ 형태

- 반환타입 함수명(매개변수){} 로 구성

- 반환타입 : 함수가 반환하는 값의 타입
- 함수명 : 함수의 이름을 의미하며 가급적이면 이 함수의 역할을 정확히 표시하는 것이 가독성에 좋음
- 매개변수 : 함수가 호출될 때 전달되는 값, 있을수도 있고 없을수도 있음
- {} : 함수의 본체, 함수가 실행될 때 수행되는 코드가 들어감

 

▶ 실습

int Sum(int a, int b)
{

	return a + b;
}

int OutputNumber(int num)
{
	cout << "OutputNumber : " << num << endl;
	return num;
}

- 결과를 반환해주는 함수 형태를 Call by Value 라 부름
- return 키워드를 이용해 반환값을 지정해준다.

 

void OutputText()
{
	cout << "OutputText" << endl;
}

- void로 반환값 없이 함수를 만들 수 있음

 

▶ 결과

int main()
{
	cout << "ㅡㅡㅡㅡㅡㅡ함수" << endl;
	cout << "Sum : " << Sum(10, 20) << endl; // 30
	cout << "Sum : " << Sum(100, 200) << endl; // 300
	OutputText();
	OutputNumber(100);
}

- 함수를 호출할때 함수명(인자); 형태로 호출

- 몇번이건 활용 가능

 

2. 지역변수란?

- 코드 블럭안에 생성되는 변수를 얘기함

- stack영역에 저장되기 때문에 함수가 끝나면 사라진다.

 

▶ 실습

void ChangeNumber(int num)
{
	num = 10;
	cout << "int num : " << num << endl;
}

int main()
{
	cout << "ㅡㅡㅡㅡㅡㅡ지역변수" << endl;
	int num = 0;
	ChangeNumber(num);
	cout << "num : " << num << endl; // 0
	return 0;
}

 

▶ 결과

- main() 함수에 int num 값이 변할 것 처럼 보이지만 main()의 지역 변수이기 때문에 값이 변하지 않았다.

 

3. 전역변수란?

- 전역변수는 프로그램이 종료될때까지 메모리에 남아있음
- 전역변수는 모든 함수에서 접근 가능

 

▶ 실습

int g_iNum = 0;

void g_ChangeNumber()
{
	g_iNum = 10;
}

int main()
{
	cout << "ㅡㅡㅡㅡㅡㅡ전역변수" << endl;
	g_iNum = 0;
	g_ChangeNumber();
	cout << "g_iNum : " << g_iNum << endl; // 10
	return 0;
}

 

▶ 결과

- 전역변수는 어떤 함수에서도 공유되는 함수이기 때문에 변경이 가능

 

4. 역참조

void ChangeNumber_point(int* num)
{
	*num = 10;
}

int main()
{
	cout << "ㅡㅡㅡㅡㅡㅡ역참조" << endl;
	int numpoint = 0;
	ChangeNumber_point(&numpoint);
	cout << "numpoint : " << numpoint << endl; // 10
	return 0;
}

- 포인터를 이용해 역참조로 num의 값을 변경

- 결과값을 변경해주는 함수 형태를 Call by Address라 한다.

 

▶ 결과

- 주소값을 이용해 변경하는 것이니 당연히 변경 가능

 

4. 함수 오버로딩

- 같은 이름의 함수를 여러개 만들 수 있다.

- 단, 함수의 이름은 같지만 매개변수의 타입이나 개수가 달라야 한다.

 

▶ 실습

void ChangeNumber(int num)
{
	num = 10;
	cout << "int num : " << num << endl;
}

void ChangeNumber(float num)
{
	num = 20.3f;
	cout << "float num : " << num << endl;
}

int main()
{
    cout << "ㅡㅡㅡㅡㅡㅡ함수 오버로딩" << endl;
    ChangeNumber(10); // int형으로 오버로딩
    ChangeNumber(0.0f); // float형으로 오버로딩

    return 0;
}

 

▶ 결과

- 같은 이름의 함수지만 자료형의 따라 다른 결과가 나오는 것을 볼 수 있음

 

5. 디폴트 매개변수

- 함수의 매개변수에 기본값을 지정해줄 수 있다.

- 매개변수를 넘기지 않아도 기본값으로 사용된다.

 

▶ 실습

void Output(int num = 10)
{
	cout << "Output : " << num << endl;
}

int main()
{
    cout << "ㅡㅡㅡㅡㅡㅡ디폴트 매개변수" << endl;
    Output(); // 10
    Output(100); // 100
	return 0;
}

 

▶ 결과

- 매개변수를 넘기지 않아도 되고 넘겨도 됨

반응형

'C++ > C++입문' 카테고리의 다른 글

[C++] 13. TextRPG 함수화_1  (0) 2025.04.14
[C++] 12. 빙고게임 함수화  (0) 2025.04.11
[C++] 10. 이중포인터  (0) 2025.04.09
[C++] 9. Char, 구조체, void 포인터  (0) 2025.04.09
[C++] 8. 배열과 포인트 연산  (0) 2025.04.08