C++ 배열 포인터 복습
내장형 하드웨어/C++ / 2011. 11. 16. 13:55
- 배열 포인터 복습
int A[30];
int *P = A;
는 성립하나.
int A[5][3];
int **P = A; 는 잘못되었다.
→ 배열과 포일터를 같이 쓸 수 있는 것은 1차원일 때 뿐이다.
→ 포인터는 1차원 용으로 2차원을 가리킬 수 없다.
→ 포인터는 원소를 가리키며 **P는 *P를 가리킨다.
→ 포인터는 한개만을 가리키기 위한 것이다.
int *A[3]; 이면
int **P = A; 로 가리킬 수 있다.
→ 가리킬 대상을 확인해야 한다.
→ 컴파일러의 경우 배열크기를 정확히 계산하지 않으므로(신경쓰지 않으므로) 잘 생각해야 한다.
→ 여기서 대상(int *)를 *P가 가리키는 것이다.
int ***PP = P;
→ 여기서 대상(int **)를 *PP가 가리키는 것이다.
→ 대상을 가리키면 모두 원 포인터(포인터의 개념은 1차원)
int A[5][3]; → int (*)[3];
int (*P)[3] = A; → 포인터로 2차월 배열의 접근 방법
int A[30];
int *P = A;
는 성립하나.
int A[5][3];
int **P = A; 는 잘못되었다.
→ 배열과 포일터를 같이 쓸 수 있는 것은 1차원일 때 뿐이다.
→ 포인터는 1차원 용으로 2차원을 가리킬 수 없다.
→ 포인터는 원소를 가리키며 **P는 *P를 가리킨다.
→ 포인터는 한개만을 가리키기 위한 것이다.
int *A[3]; 이면
int **P = A; 로 가리킬 수 있다.
→ 가리킬 대상을 확인해야 한다.
→ 컴파일러의 경우 배열크기를 정확히 계산하지 않으므로(신경쓰지 않으므로) 잘 생각해야 한다.
→ 여기서 대상(int *)를 *P가 가리키는 것이다.
int ***PP = P;
→ 여기서 대상(int **)를 *PP가 가리키는 것이다.
→ 대상을 가리키면 모두 원 포인터(포인터의 개념은 1차원)
int A[5][3]; → int (*)[3];
int (*P)[3] = A; → 포인터로 2차월 배열의 접근 방법
int (*new2)[2]= new int[3][2];
int (*new3)[2][5]= new int[3][2][5];
delete [] new2;
delete [] new3;
→ 위와 같은 방법으로 2차원, 3차원... 배열을 포인터로 접근할 수 있다.int (*new3)[2][5]= new int[3][2][5];
delete [] new2;
delete [] new3;
※ C++은 조그만 문법이라도 검사하므로 조심해야 한다.
'내장형 하드웨어 > C++' 카테고리의 다른 글
C++ - 템플릿(template) (0) | 2011.11.21 |
---|---|
C++ - 참조, 복사 생성자, 연산자(operator) 오버로딩 (0) | 2011.11.17 |
C++ - 객체 소멸 순서, 객체 생성(정적, 동적 할당-malloc, new) (0) | 2011.11.15 |
C++ - car class 추가, 다중상속, 유도(derivation), 타입 (0) | 2011.11.14 |
C++ 생성자, 소멸자, 상속 (0) | 2011.11.11 |