2016. 5. 9. 22:48

* 포인터를 사용한 방법의 장점

- 포인터가 인덱스 표기법보다 빠르다

- 이유는 원소의 주소를 계산할 필요가 없다


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;