함수란 무엇인가? |
함수는 자주 사용하는 코드를 묶어 놓은 거라고 할 수 있습니다.
예를 들면 두 수를 입력해서 두 수의 합을 구하는 프로그램을 작성한다고 하면, 간단히 한 줄로 코딩 할 수 있습니다.
두 수를 입력받는게 일정하지 않고 여러 번 계속해서 불려진다면 한 줄짜리 코딩이라고 해도 나중에는 셀 수 없어질 정도로 늘어나게 됩니다. 이러한 점을 좀더 편하게 하기 위해서 만들어진 게 함수입니다.
함수는 시스템 함수와 사용자 함수로 나눌 수 있는데 시스템 함수는 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 |