영넌 개발로그
[C++ 기초] 함수 파라미터, 아규먼트로 배열 입력(1차원, 다차원) /함수 포인터 Function Pointer 본문
int func_a(int k _) <--parameter
{ }
func_a(50); <--------- argument
배열 파라미터
1차원 배열의 합을 구하는 함수 2가지 >
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
int sum_array_elements1(int _array[], int size) {
int sum(0);
for (int i = 0; i < size; i++) {
sum += _array[i];
}
return sum;
}
int sum_array_elements2(int* _array, int size);
int main()
{
int array_a[5] = { 1,2,3,4,5 };
int sum = sum_array_elements1(array_a, 5);
cout << "Array sum: " << sum << endl;
return 0;
}
문제점: 함수 내에서 original array의 값을 바꿀 수도 있음
const
pointer의 경거망동을 막아줌
데이터를 읽기만하고 쓰는건 불가능
int a =10; 일때,
아래 둘 간의 차이점은 무엇인가?
int * pa = &a;
const int * pb = &a;
pb[3] = 50; 불가능
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
int sum_array_elements1(const int _array[], int size) {
int sum(0);
for (int i = 0; i < size; i++) {
sum += _array[i];
}
return sum;
}
int sum_array_elements2(const int* _array, int size);
int main()
{
int array_a[5] = { 1,2,3,4,5 };
int sum = sum_array_elements1(array_a, 5);
cout << "Array sum: " << sum << endl;
return 0;
}
2차원 배열일 경우>
#include <iostream>
using namespace std;
int sum_2d_array(int _array[][3], int _row_cnt) {
int sum(0);
for (int r = 0; r < _row_cnt; r++)
{
for (int c = 0; c < 3; c++) {
sum += _array[r][c];
//sum += *(*(_array+r)+c);
}
}
return sum;
}
/*
int sum_2d_array2(int (*_array)[3], int _row_cnt);
int * _array[3]은 틀린 문법 : 3개의 int*를 저장한다는 뜻이다.
괄호를 꼭 써주자!
*/
int main()
{
int array_2d_a[2][3] = {
{1,1,1},
{2,2,2}
};
cout << "Sum: " << sum_2d_array(array_2d_a, 2) << endl;
return 0;
}
Function Pointer
함수 주소를 담는 포인터
선언법 : return type (* 포인터이름) (parameter type) ;
포인터이름 = 함수이름;
포인터이름(파라미터);
실험용 코드>
#include <iostream>
using namespace std;
void func_A(void) {
cout << "This is func_A" << endl;
}
void func_B(void) {
cout << "This is func_B" << endl;
}
int func_C(int k) {
cout << "This is func_C : " << k<<endl;
return k + 1;
}
int main()
{
void (*pf) (void);
pf = func_A;
pf();
pf = func_B;
pf();
int(*pd) (int);
pd = func_C;
pd(5);
cout << "After call: " << pd(5);
return 0;
}
'코딩 > C++' 카테고리의 다른 글
[C ++ 기초] 함수 기본 파라미터 , OOP (객체기반프로그래밍), 생성자 constructor (0) | 2020.10.26 |
---|---|
[C++ 기초] 참조 변수 Reference variable (0) | 2020.10.26 |
[C++ 기초] text file 읽고 쓰기, fstream 헤더 (0) | 2020.10.23 |
[C++ 기초] cctype 헤더파일 (0) | 2020.10.23 |
Comments