◆함수의 자료형
일반적으로는 함수는 자신의 리턴값을 CPU의 지정된 레지스터나 메모리에 복사하는 방법으로 리턴한다.
그러면 함수를 호출한 프로그램이 그 위치에 무엇이 있는 지 조사한다. 그러므로 데이터형을 일치 시켜야한다.
함수 원형은 호출한 프로그램에게 그 위치에 어떤 데이터형이 놓일지 알려 준다.
◆함수에 쓰이는 변수들
●형식 매개변수 (formal parameter)
- 전달되는 값을 넘겨받는데 쓰이는 변수
●실제 매개변수 (actual argument)
- 함수에 전달 되는 값
◆함수에 배열의 길이 까지 전달하는 법
1. 함수가 배열 원소의 개수를 알 수 있는 방법은 두 번째 매개변수를 통해서이다.
- void sortArray (int arr[], int size);
2. 또 다른 방법은 두 번째 매개변수를 배열의 끝을 지시하는 포인터를 전달하면 된다.
- void sortArray(int * arr, int * arr+10);
- 포인터 *arr이 있을 때 arr+4 는 &arr[4]와 같은것을 의미한다.
- 함수의 매개변수 앞에 const를 작성 해 주면, 매개변수를 사용해 그 데이터를 변경할 수 없다.
◆포인터와 const
1. 상수 객체를 지시하는 포인터를 만드는 것
- 포인터를 사용해 원본의 값을 바꿀 수 없다.
- const int * pt = &age;
2. 포인터 자신을 상수로 만드는 것
- pt가 age만을 가르키게 고정한다.
- int * const pt = &age;
★const int * const pt = &age도 가능하다
- const 변수는 일반 포인터에는 대입이 불가능하다.(const 포인터에만 가능하다)
- const는 한다리를 건너는 간접 지시의 경우에만 동작한다.
- (=배열의 원소는 기본형이여야 한다. 포인터이면 안된다.)
◆함수와 구조체
- 함수는 구조체를 변수로 사용하고 반환할 수 있다.
- 구조체의 주소를 전달하여, 구조체의 내용에 접근하는 포인터를 이용하는 방식을 선호한다.(구조체의 크기가 클 수 있어서)
◆함수와 array
- void show(std::array<double,4> da) : da객체
- void fill(std::array<double,4> *pa) : pa 객체에 대한 포인터
◆다중 재귀 호출
- 재귀 호출은 하나의 작업을 서로 비슷한 두 개의 작은 작업으로 반복적으로 분할해 강면서 처리해야 하는 사황에서 특별히 유용하다. 이러한 재귀적인 접근을 분할 정복(divde and conquer) 전략이라고 한다.
◆함수 주소 얻기
- 뒤에 괄호를 뺴고 함수 이름만 사용하면 된다.
- hamsu(getSince);
- hamsu에 getSince()의 주소를 전달한다.
◆함수를 지시하는 포인터
●가르킬 함수의 반환형이랑 같게 선언하며, 매개변수도 같게 가로에 넣어준다.
- double (*pf)(int);
- 함수를 지시하는 포인터 선언에서는 연산자 우선순위 때문에 *pf를 괄호로 둘러싸야 한다.
- *pf(int)는 pr()가 포인터를 리턴하는 함수가 되버린다.
◆포인터를 사용하여 함수 불러내기
double pam(int);
double (*pf)(int);
pf = pam;
double x = pam(4);
double y = (*pf)(5); //= pf(5)
◆pa와 &pa의 차이
- pa는 배열의 첫 번째 원소의 주소이다. (&pa[0])(단일 포인터 주소이다.)
- &pa는 전체 배열의 주소이다. (+1을 하면 전체 배열의 크기만큼 지나간다.)(**pa로 값을 확인할 수 있다.)
◆자동 형 변환 auto
- 알맞은 형으로 변환 시켜준다.
- 복잡한 형에 적용하기 좋다. 단, 대입연산자의 값을 잘 확인해야 한다.
◆포인터를 이용한 함수 사용
-추후 작성...
'C++ > C++' 카테고리의 다른 글
9. 메모리 모델과 이름 공간 (0) | 2023.07.14 |
---|---|
8. 함수의 활용 ★ (0) | 2023.07.12 |
6장 조건문 (0) | 2023.07.02 |
5장 반복문과 cin 메모 (0) | 2023.07.01 |
4장 포인터, 배열, 포인터 연산 메모 (0) | 2023.06.26 |