작성
·
67
1
int *r1 = new int[col];
이게 사실
int r1;
int *r1 = &r1;
int col = r1;
이거랑 같은건가요?
그래서 int *r1의 int랑 new int[col]의 int랑 타입은 항상 같아야 하구요..?
답변 2
1
안녕하세요? 질문&답변 도우미 Soobak입니다.
같지 않습니다.
int *r1 = new int[col];
: 여기서 r1
은 포인터(int*
)이며, 동적으로 할당된 배열의 첫 번째 원소의 주소를 저장하게 됩니다.
new int[col]
은 int
타입의 배열을 동적으로 생성하고, 배열의 첫 번째 요소의 주소를 반환합니다.
반면,
int r1;
int *r1 = &r1;
int col = r1;
: 이 코드는 우선 문법적으로 옳지 않아 컴파일 오류가 발생합니다.
int *r1 = &r1;
이 부분에서, 기존 r1
이 이미 정의되었으므로 같은 이름의 변수를 선언할 수 없기 때문입니다.
질문주신 내용의 맥락 상으로 int *r1 = &r1;
가 가능하다고 가정하더라도, col = r1;
부분에서 int*
타입을 int
에 할당하는 것이므로 컴파일 오류 발생합니다.
이해를 돕기 위해 동적으로 생성하는 배열이 아닌, 정적 배열에 대한 경우로 예를 들어보자면 다음과 같습니다.
int arr[col]; // 정적 배열 선언
int *r1 = arr; // 배열의 첫 번째 요소의 주소를 포인터에 저장
: arr
은 정적 배열이며, arr
자체가 배열의 첫 번째 요소의 주소를 나타냅니다. r1
은 arr
의 첫 번째 요소의 주소를 가리키는 포인터입니다.
이와 비슷하게, int *r1 = new int[col];
에서 r1
은 동적으로 생성된 배열의 첫 번째 요소의 주소를 가리키는 포인터입니다.
마지막에 질문주신 "int *r1의 int랑 new int[col]의 int랑 타입은 항상 같아야 하는가?" 에 대해서는 옳습니다.
포인터를 통해 배열의 첫 번째 원소의 주소를 가리킬 때, 포인터의 자료형은 배열의 자료형과 같아야 합니다.
0
안녕하세요, 인프런 AI 인턴입니다. hansh4530님.
질문해주신 내용에 대해 설명드리면, int *r1 = new int[col];
는 C++에서 동적 메모리 할당을 사용하여 col
크기의 정수형 배열을 힙(동적 메모리)에 생성하는 코드입니다.
여기서 int *r1
은 포인터로, 동적으로 할당된 배열의 첫 번째 요소의 주소를 가리키게 됩니다. 즉, 포인터 r1
은 그 배열의 시작 주소를 저장하고 있습니다. 따라서 정의적으로 int r1
와는 다릅니다. int r1
은 단순히 정수형 변수 하나를 선언하는 것이고, 포인터와는 역할이 다릅니다.
따라서 int *r1 = &r1;
와 같은 코드는 위와는 무관한 개념입니다. int *r1
은 new int[col]
에 의해 생성된 정수 배열의 주소를 저장하게 되는 포인터입니다.
그리고 맞습니다. 포인터의 타입과 할당하려는 데이터 타입이 동일해야 메모리에서 올바르게 데이터를 다룰 수 있습니다. 따라서 int
타입의 데이터를 저장하기 위해 int *
포인터가 사용됩니다.
관련하여 더 자세히 설명된 질문과 답변이 있는 게시물 링크를 추천해 드립니다:
위 링크를 참고하셔서 동적 메모리 할당과 포인터의 개념을 한 번 더 확인하시면 도움이 될 것 같습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.