Pointer의 배열 & 다중 포인터
포인터 배열
포인터 변수의 내용이 포인터인 배열
ex)
char* apList[3] = {"Hello", "World", "String"};
해석 방법
1. 배열 3개를 가진 변수 apList가 존재한다.
2. apList의 각각 요소는 char * 형이다.
apList : char ** - char *를 저장하는 포인터니까
apList[1] : char * - char *를 저장하는 포인터의 두번 째 인덱스에 들어있는 값이니까
char형 변수에 대한 포인터 : char *
char* 형 변수에 대한 포인터 : char **
다중 포인터
포인터 변수도 결국은 변수다.
즉 포인터 변수도 주소를 가지고 있고, 그 주소를 다른 포인터 변수에 저장할 수 있다.
포인터 변수 자체의 주소와 포인터 변수가 담고있는 주소를 구분하는 것이 중요하다.
ex)
char ch = 'A';
char *pData = &ch;
char* *ppData = &pData;
(char* *ppData, char** ppData, char **ppData 모두 동일한 것이다. 해석의 편의를 위해 위와 같이 적었다.)
해석 방법 (char* *ppData = &pData)
1. 포인터형 변수 ppData가 존재한다.
2. 이 포인터형 변수에 들어가는 것은 char* 형 변수의 주소이다.
- 그렇기에 char *형인 pData의 주소(&pData)를 대입한 것이다.
포인터 배열과 다중 포인터의 조합
char* astList[3] = { "Hello", "World", "String" };
char* *ppstrList = astList;
char** *pppstrList = &ppstrList;
ppstrList 는 char*형 포인터 변수의 주소를 저장할 수 있다.
-> astList의 요소가 char* 이므로 astList는 char*를 내용으로 가지는 포인터 변수(배열)의 주소가 된다.
다차원 배열에 대한 포인터
다차원 배열 : 배열의 배열 ( 배열 : 같은 형식의 자료가 여러개 있는 것 )
char[3][12] : char[12]인 요소가 3개 있는 다차원 배열
이를 포인터에 넣을 때에는 char (*~)[12] 를 사용한다.
주의) char* *ppList = ~ 로 하면 문제가 생기는데, 그 이유는 char* *ppList 에는 요소가 char*인 배열의 주소가 들어가야 하는데,
char[3][12] 는 요소가 char[12] 이기 때문이다.
- 출처 : 독하게 시작하는 C 프로그래밍 (최호성, 루비 페이퍼)
'Programming > C language' 카테고리의 다른 글
Chapter 12. 함수 응용 (내용 요약) (0) | 2017.06.30 |
---|---|
Chapter 11. 메모리와 포인터 (문제풀이) (0) | 2017.06.29 |
chapter 11. 메모리와 포인터 (내용요약 - 2) (0) | 2017.06.28 |
Chapter 11. 메모리와 포인터 (내용 요약 - 1) (0) | 2017.06.28 |
Chapter 10. 함수에 대한 기본 이론 (문제 풀이) (0) | 2017.03.22 |