* 포인터를 사용한 방법의 장점
- 포인터가 인덱스 표기법보다 빠르다
- 이유는 원소의 주소를 계산할 필요가 없다
ex) sum += a[i];
sum += *a++;
- 디지털 이미지는 배열을 사용하여 저장된다
- 이미지 처리를 할 때 속도를 빠르게 하기 위하여 포인터를 사용한다
void brighten_image(char image[][size])
{
}
* 포인터를 이용하지 않는 버전도 작성
- 배열의 인덱스 표기법으로 위의 프로그램을 변환
- 배열의 이름에 다른 변수의 주소를 대입
- 포인터를 이용하여 배열의 원소들을 참조
- 포인터를 배열의 이름처럼 사용
* 이중 포인터
- 포인터를 가리키는 포인터
int i = 10;
int* p = &i;
int** q = &p;
* 포인터 배열
- 포인터 배열 : 포인터를 모아서 배열로 만든 것
int* ap[10];
1. [] 연산자가 * 연산자보다 우선 순위가 높으므로 ap는 먼저 배열이 된다
2. 어떤 배열이냐 하면 int*(포인터) 들의 배열이 된다
* 2차원 배열에 문자열을 저장
char fruit[4][10]
= { "apple", "blueberry", "orange", "melon"};
* 문자형 포인터 배열
char* fruit[]
= { "apple", "blueberry", "orange", "melon"};
* 배열 포인터
- 배열을 가리키는 포인터
int (*pa)[10];
1. 괄호가 먼저 있으므로 pa는 포인터가 된다
2. 어떤 포인터냐 하면 int [10]을 가리키는 포인터이다.
int a[5] = {1, 2, 3, 4, 5};
int (*pa)[5];;
pa = &a;
std::cout << (*pa)[2] << std::endl;
int arr[10];
int *parr;
int (*parr2)[10];
parr = arr;
parr2 = &arr;
arr[3] = 20;
std::cout << parr[3] << std::endl;
std::cout << (*parr2)[3] << std::endl;