도서 : 초보자를 위한 C++ 프로그래밍(성안당)
지음 : 강성수 지음
- 포인터와 1차원 배열
- 형식 : 배열명[첨자]는 *(배열명 + 첨자)와 같은 결과를 갖는다.
- str[3]; // 1차원 배열 -> *(str + 3); //1차원 배열을 포인터 수식으로 표현
- int array[3] = { 5, 10, 15}; -> int* pt; -> pt = array; //array는 배열명이므로 &array[0]과 동일
- 포인터와 2차원 배열
- 형식 : 배열명[첨자1][첨자2]는 *(*(배열명 + 첨자1) + 첨자2)로 변경한다.
- int a[2][3] = ... ; -> int (*p)[3]; //2차원 배열의 포인터 선언 -> p = a; //포인터 초기화
- 3차원 배열 역시 위와 비슷하게 int (*p)[2][3]; 처럼 늘려주면 된다.
- p, &p[0], *p, **p 모두 시작 번지 값으로 같다.
- 포인터와 함수
- 포인터를 사용하면 다른 함수의 변수를 간접으로 접근할 수 있으므로 함수에 변수나 배열을 전달하기도 하고, 처리한 결과값을 반환받을 때 사용한다.
- 실습 - 하나의 변수를 인자로 한 함수 사용하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 |
#include <iostream>
using namespace std;
void chonge(int* p); //함수 원형
int main() {
int x = 1004;
chonge(&x);
cout << "chonge() 함수 호출 후 변수 x의 값 : " << x << endl;
return 0;
}
void chonge(int* p) {
cout << "chonge() 함수 : " << *p << endl; //main() 함수의 x값 출력
*p = 375; // x값을 변경
} |
cs |
- 결과
- 함수 포인터
- 프로그램을 작성하여 컴파일하고 링크하여 실행 파일을 만들고 실행하면 프로그램의 기계어로 번역된 모든 부분이 메모리 영역에 저장되고 실행된다.
- 함수명은 함수 포인터가 되는 것으로, 함수를 호출할 때 함수명을 사용하는 것이다. 함수의 시작 주소를 갖는 포인터를 사용하면 해당 함수를 호출할 수 있다.
- 예제 : 함수 포인터 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 |
#include <iostream>
using namespace std;
int add(int x, int y);
int mult(int x, int y);
void fn(int(*fp)(int x, int y));
int main() {
fn(add);
fn(mult);
return 0;
}
void fn(int(*fp)(int x, int y)) {
int a = 3, b = 7, dap;
dap = fp(a, b);
cout << "결과 = " << dap << endl;
}
int add(int x, int y) {
return x + y;
}
int mult(int x, int y) {
return x * y;
} |
cs |
- 결과
'C++ 개념' 카테고리의 다른 글
inline 함수 (0) | 2019.03.01 |
---|---|
공용체 (0) | 2019.03.01 |
void * 형 포인터는 캐스트 변환 (타입 *)으로 (0) | 2019.02.28 |
문자열 함수 (0) | 2019.02.28 |
continue문 - 흐름 이동 (0) | 2019.02.27 |