간단한 C++ 문법 질문 드립니다.

dazers62의 이미지

기존에는 C언어만 하다가 새롭게 C++를 하게되었는데

내공이 부족해서인지 문법이 이해가 가질 않아 질문드립니다.

Class AAA
{
......
};

int main(){

AAA** a;

a = new AAA*[3];

...
}

이게 무슨말인거죠???

AAA**a -> AAA* a 의 오타
a = new AAA*[3] -> a = new AAA[3] 의 오타는 아니겠죠???

익명 사용자의 이미지

재귀적으로 생각해 보세요.
a는 포인터 타입입니다.

무엇을 가리키는가.
AAA *형을 가리킵니다.

AAA *형은 무엇인가
AAA를 가리키는 포인터 타입입니다.

new AAA * [3];은 포인터 타입 3개짜리 배열을 선언하여 그 첫번째 원소의 주소값을 돌려줍니다.
이걸 받아서 a에 저장하는거죠.
그러면 a는 새로 만들어진 크기 3개짜리 원소의 첫번째 원소를 가리키게 되는 겁니다.
그래서 a의 타입이 AAA ** 인 겁니다. (AAA *)* 라고 묶어서 생각해 보시는 것도 좋겠군요.

이중 포인터 문제이므로 사실 C 하셨으면 쉬운 문제입니다.
C스타일대로 쓰자면
AAA **a;
...
a = malloc(sizeof(AAA*) * 3);
이런 거죠.

익명 사용자의 이미지

좋은 답변 감사드립니다!
아직 내공이 부족하군요 ㅠ_ㅠ