동적 변수 질문이요!
102
작성한 질문수 5
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 * 포인터가 사용됩니다.
관련하여 더 자세히 설명된 질문과 답변이 있는 게시물 링크를 추천해 드립니다:
위 링크를 참고하셔서 동적 메모리 할당과 포인터의 개념을 한 번 더 확인하시면 도움이 될 것 같습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
교재 있나요?
1
131
2
11:11 부근에 Something::temp와 Something::getValue의 앞에 &를 붙이는 이유가 뭔가요? (함수 이름은 포인터(주소)가 아닌가요?)
1
87
3
using namespace std; 선언 후에 std::를 하는 이유가 궁금합니다
1
99
2
cstr직접구현
0
114
3
BubbleSort
1
76
2
숙제 마지막 부분
1
78
2
강의와 똑같이 진행했는데 링킹 에러가 발생합니다.
1
92
2
수업할때 레퍼런스로 사용하는 도서는 어떤 도서인가요??
1
159
2
공변반환형 관련 문의 드립니다.
1
89
2
170강 유니크 포인터에대해 질문있습니다
1
79
1
섹션 5 퀴즈의 답이 이상합니다
1
83
2
이중포인터와 배열이 이해가 안됩니다.
1
152
2
5분 17~5분 34초 객체 잘림 질문
1
75
1
Resource.h 코드 알려주세요
1
70
1
char name[] 배열의 길이와 관련해 일부 궁금점이 생겨서 질문합니다
1
93
2
화면좌측 숫자 보이기
1
113
1
화면 좌측 숫자 보이기
0
65
1
처음 c++ 수강하려는데요. 비주얼스튜디오 2022 다운로드해서 설치하면 되는건가요??
1
136
3
46강 string 버퍼 질문입니다
1
80
2
프로그래머스 수열과 구간 쿼리 2 문제 질문입니다.
1
123
2
[] 범위 검사시 assert 사용 관련 질문
1
87
2
Lecture 클래스 멤버변수 명명 관련
0
89
2
프로그래머스의 대소문자 바꿔서 출력하기 문제를 푸는데요
0
72
1
noexcept과 throw()
1
81
2





