728x90
반응형
함수란 무엇인가?

  함수는 자주 사용하는 코드를 묶어 놓은 거라고 할 수 있습니다.

예를 들면 두 수를 입력해서 두 수의 합을 구하는 프로그램을 작성한다고 하면, 간단히 한 줄로 코딩 할 수 있습니다. 

  두 수를 입력받는게 일정하지 않고 여러 번 계속해서 불려진다면 한 줄짜리 코딩이라고 해도 나중에는 셀 수 없어질 정도로 늘어나게 됩니다.  이러한 점을 좀더 편하게 하기 위해서 만들어진 게 함수입니다.

  함수는 시스템 함수사용자 함수로 나눌 수 있는데 시스템 함수는 visual c++이 만들어 질 때 이미 만들어져 있는 함수입니다. 예를 들면 printf()함수가 대표적입니다.

사용자 함수는 사용자의 필요에 의해서 만들어지는 함수입니다

 

 

사용자 정의 함수

  함수에는 return이 있는 함수나 return이 없는 함수로 나눌 수 있습니다.

return이 있는 함수반환하는 값이 있다는 의미이고 return이 없는 함수반환하는 값이 없을 때 사용하는 함수입니다.

void main() 처럼 쓴다면 "return이 없다"는 것을 의미합니다. void는 생략 가능합니다.

 

 

 

인수란

사용자 정의 함수를 호출할 때 사용되는 변수값을 의미합니다.

함수의 호출 방법은 함수 이름(인수)과 같은 형태는 지닙니다.


만약 인수가 없다면 함수 이름()의 형태를 가지면 됩니다.

 

 

edukoi.tistory.com/106?category=894960

 

5. C/C++ 함수 기초

edukoi.tistory.com/97?category=894960 2. C/C++ 함수 - 인수 전달 방법 함수란 무엇인가? 함수는 자주 사용하는 코드를 묶어 놓은 거라고 할 수 있습니다. 예를 들면 두 수를 입력해서 두 수의 합을 구하는 프

edukoi.tistory.com

함수 인수 전달 방법 1 - [ Call by value(값에 의한 호출) ]

장점 : 복사하여 처리하기 때문에 안전하다. 원래의 값이 보존이 된다.

단점 : 복사를 하기 때문에 메모리가 사용량이 늘어난다. 

 

[ 인수를 사용한 함수 호출 ]

#include <iostream>
#include <algorithm>
using namespace std;
int go(int, int, int);
int main()
{
	int t;
	int a=4, b=5, c=10;
	cout << "main a, b, c의 값= " << a << ' ' << b << ' ' << c <<'\n';
	t = go(a, b, c);
	cout << "go함수 호출 후 main a,b의 값=" << a <<' '<< b << ' ' << '\n';
	cout << "t = " << t << ' ' << "c = " << c << '\n';
	return 0;
}
int go(int a, int b,int c)
{
	a = a + 10;
	b = b + 10;
	c = c + 10;
	cout << "go a,b,c의 값에 10 더한값 = " << a << ' ' << b <<' ' << c <<'\n';
	return c;
}

 

[ 1차원 배열을 인수로 하는 함수 작성  ]

#include <iostream>
#include <algorithm>
using namespace std;
void go(int[]);
int main()
{
	int i;
	int ba[5] = {1, 2, 3, 4, 5}; 
	cout << "main ba배열의 값 = "; 
	for(i=0;i<5;i++)
	{
		cout << ba[i] << ' ';
	}
	cout << '\n';
	go(ba);
	cout << "go함수 호출 후 main ba배열의 값 = "; 
	for(i=0;i<5;i++)
	{
		cout << ba[i] << ' ';
	}
	cout << '\n';
	return 0;
}
void go(int kk[])   //void go(int *ba)
{
	int i;
	cout << "go함수의 ba배열의 값 = "; 
	for(i=0;i<5;i++)
	{
	   kk[i] =  kk[i] +10;
	}
		for(i=0;i<5;i++)
	{
		cout << kk[i] << ' ';
	}
	cout << '\n';
}

 

 

[ 다차원 배열을 인수로 하는 함수 작성  ]

#include <iostream>
#include <algorithm>
using namespace std;
void go(int [][5]);
int main()
{
	int i, j;
	int ba[3][5] = {{1, 2, 3, 4, 5},
					{11,12,13,14,15},
					{21,22,23,24,25}}; 
	char st[10];
	cout << "sizeof(int) " << sizeof(int) << '\n'; 
	cout << "sizeof(char) " << sizeof(char) << '\n'; 
	cout << "sizeof(float) " << sizeof(float) << '\n'; 
	cout << "sizeof(double) " << sizeof(double) << '\n'; 
	cout << "sizeof(st[]) " << sizeof(st) << '\n'; 
	cout << "sizeof(st[2]) " << sizeof(st[2]) << '\n'; 
	cout << "sizeof(ba)의 값 = " << sizeof(ba) << '\n';  
						//int = 4byte 총15개 *4 = 60
	cout << "sizeof(ba[0])의 값 = " << sizeof(ba[0]) << '\n';  
                                     //한행의 총 byte의 수
	int row = sizeof(ba) / sizeof(ba[0]);   
	int col = sizeof(ba[0]) / sizeof(int);
	
	cout << "행 수 = " << row << '\n';
	cout << "열 수 = " << col << '\n';

	cout << "main ba배열의 값 = " << '\n'; 
	for(i=0;i<3;i++)
	{
		for(j=0;j<5;j++)
		{
			cout << ba[i][j] << ' ';
		}
		cout << '\n';
	}
	cout << '\n';
	go(ba);

	cout << "go 함수 호출 후 main ba배열의 값 = " << '\n'; 
	for(i=0;i<3;i++)
	{
		for(j=0;j<5;j++)
		{
			cout << ba[i][j] << ' ';
		}
		cout << '\n';
	}
	cout << '\n';
	return 0;
}
void go(int (*ba)[5])    //int go(int ba[][3])
{
	int i, j;
	cout << "go 함수 ba배열의 값 = " << '\n'; 
	for(i=0;i<3;i++)
	{
		for(j=0;j<5;j++)
		{
			ba[i][j] = ba[i][j] + 100;
			cout << ba[i][j] << ' ';
		}
		cout << '\n';
	}
	cout << '\n';

	return ; 
}

 

함수 인수 전달 방법2 - [ Call by reference(참조에 의한 호출)  ]

장점 : 복사하지 않고 직접 참조를 하기에 빠르다.
단점 : 직접 참조를 하기에 원래 값이 영향을 받는다.(리스크)

[ Call by value,  Call by reference,  Call by pointer ]

#include <iostream>
#include <algorithm>
using namespace std;
void go(int, int&, int*);
int main()
{
	int a=4, b=5, c=6;
	cout << "main a, b의 값= " << a << ' ' << b << '\n';
	go(a, b, &c);
	cout << "go함수 호출 후 main a,b,c의 값 = ";
	cout <<  a << ' ' << b << ' ' << c << '\n';
	return 0;
}
void go(int a2, int &b2,int *c2)
{
	cout << "sizeof(a2) : " << sizeof(a2) << '\n';
	cout << "sizeof(b2) : " << sizeof(b2) << '\n';
	cout << "sizeof(c2) : " << sizeof(c2) << '\n';
	a2 = a2 + 10;
	b2 = b2 + 10;
	*c2 = *c2 + 10;
	cout << "go a2, b2의 값에  1 더한값 = " ;
	cout <<  a2 << ' ' << b2 << ' ' << *c2 <<'\n';
	return;
}

 

[ 두 개의 변수 값 교환 1 - 바뀌지 않음  ]

#include <iostream>
using namespace std;
void swap(int a, int b){
	int temp;
	
	temp = a;
	a = b;
	b = temp;
}

int main(){
	int a, b;
	a = 10;
	b = 20;
	
	cout << "swap 전 : " << a << ' ' << b <<'\n';
	swap(a, b);
	cout << "swap 전 : " << a << ' ' << b <<'\n';
	return 0;
}​

 

[ 두 개의 변수 값 교환 2 - 포인터 ]

#include <iostream>
using namespace std;
void swap(int *a, int *b){
	int temp;
	temp = *a;
	*a = *b;
	*b = temp;
}
int main(){
	int a, b;
	a = 10;
	b = 20;
	cout << "swap 전 : " << a << ' ' << b <<'\n';
	swap(&a, &b);
	cout << "swap 전 : " << a << ' ' << b <<'\n';
	return 0;
}

 

[ 두 개의 변수 값 교환 3 - 참조에 의한 호출 ]

#include <iostream>
using namespace std;
void swap(int &a, int &b){
	int temp;
	temp = a;
	a = b;
	b = temp;
}
int main(){
	int a, b;
	a = 10;
	b = 20;
	
	cout << "swap 전 : " << a << ' ' << b <<'\n';
	swap(a, b);
	cout << "swap 전 : " << a << ' ' << b <<'\n';
	return 0;
}

 

 

반응형

'C++ 언어' 카테고리의 다른 글

6. C/C++ 연결리스트  (0) 2021.01.18
5. C/C++ 함수 기초  (0) 2020.11.23
4. C/C++ 동적 메모리  (0) 2020.11.05
3. C/C++ 연산자  (0) 2020.09.25
1. C/C++ 구조체 정렬하는 방법  (0) 2020.07.29
Posted by 명문코딩컴퓨터
,