[Do it! C언어 입문] 17장. 다차원 포인터
17. 다차원 포인터
17-1 다차원 포인터 개념
일반 변수에도 주소 값을 저장할 수는 있지만, 자신이 저장하고 있는 주소에 가서 값을 읽거나 쓸 수 없기 때문에 의미가 없다.
17-2 2차원 포인터
short **pp;
연산자를 최대 2개까지 사용하여 만들 수 있다.
*pp로도 값을 변경할 수 있고, 1차원 포인터 변수 p를 사용하여 *p로도 값을 변경할 수 있다.
1차원 포인터 변수에 1차원 포인터 변수의 주소를 저장하면 - 연산자를 한 개만 사용할 수 있기 때문에 다른 포인터 변수까지만 이동할 수 있다. - 실용성이 떨어진다.
2차원 포인터가 가리키는 첫 대상이 일반 변수인 경우 - 각 변수 간에 자료형이 맞지 않아서 형 변환을 많이 해줘야 한다.
2차원 포인터가 가리키는 대상을 동적으로 할당하기 - `pp = (short *) malloc(sizeof(short ));`은 short형식의 포인터를 동적으로 할당하여 그 주소 값을 2차원 포인터 pp에 저장하는 형태이다. 그래서 1차원 포인터 한 개를 동적 할당한다고 할 수 있다.
2차원 포인터와 동적 메모리 할당을 사용해서 2차원 메모리 구조를 만들면 행의 개수나 열의 개수가 변경되더라도 컴파일을 다시 하지 않아도 된다.
17-3 2차원 포인터와 함수의 매개변수
함수의 매개변수로 포인터를 사용하는 경우에 차원 개념을 잘못 적용하면 원하는 값을 제대로 반환 받지 못해 오류가 발생
17-4 2차원 포인터와 2차원 배열
여러 개의 1차원 포인터를 동적
할당하기
Example) malloc
함수의 매개변수에 동적으로 할당할 메모리의 크기를 적을 때는 상수 뿐만 아니라 변수를 사용할 수 있다.
int n;
short **pp;
scanf("%d", &n);
pp = (short **) malloc(sizeof(short *) * n);
2차원 배열과 동적 메모리 할당
주어진 문제의 속성에 따라 어떤 자료형을 사용할지 어떤 배열 구조를 사용할지 곰곰히 생각을 해 보자.
이제 variation을 어떻게 해결할지 고민해 보자.
1) 각 연령층에 포함된 인원수가 변한다면? - 각 연령층이 몇 명인지 입력을 받고 그 입력 받은 만큼 동적 메모리를 할당
2) 직원의 연령층이 다양해진다면? - 2차원 포인터의 진가가 발휘된다.