해결된 질문
작성
·
361
0
안녕하세요 선생님^^
강의를 듣다 헷갈리는 부분이 있어 질문 드립니다
배열이 메모리의 데이터 영역에 할당된다고 하셨는데 혹시 c++도 해당되는 내용인가요? 제가 강의를 c++로 따라가고 있는데 보통은 스택이나 힙에 할당되고 전역으로 선언하면 데이터 정도로만 알고 있어서 혹여나 c는 다른지? 아니면 제가 모르는 내용이 있는지 궁금해서 질문드립니다
지역변수 벡터 v가 있을 때 &v와 &v[0]가 다른 점은 이해가 가는데요, 다만 &v보다 &v[0]가 더 큰 이유를 모르겠습니다... 벡터는 힙에서 동적 할당되는게 아닌가요? &v가 스택이고 &v[0]가 힙이라면 힙이 더 낮은 주소에 위치하니까 &v[0]이 더 작아야 한다고 생각하는데 제가 뭔가 잘못 생각하고 있는 걸까요? 아래는 x86 실행 사진입니다
빠르게 완강하고 소켓 강의 듣고싶은데 집에만 오면 녹초가 되니 참 난감하네요
혼자서 공부한다는게 참 쉽지 않은 일인듯 합니다. ㅠㅠ
그래도 좋은 강의를 들을 수 있어 행운이겠지요~~ 항상 감사드립니다^^
답변 1
1
배열은 RW가 가능한 데이터 영역 메모리(보통 스택이나 힙)를 관리하는 방법인 유도형(자료형)입니다. 보통 연속된 메모리 입니다. 가령 int a[10]; 배열 선언은 int형 변수 10개가 나란이 연속됩니다.
문제는 C++의 vector<>는 일반적인 배열이 아니라는 점 입니다. 이는 STL이 제공하는 형식이며 C++언어 수준에서 보면 배열처럼 보이지만 사실 내부는 '연결 리스트'가 되거나 1번에서 설명한 배열이 되거나 합니다. v의 주소와 v[0] 주소가 다른 이유는 간단하겠습니다. '연결 리스트'의 주소와 리스 내부 0번 요소의 주소기 때문입니다. 당연히 다를 것입니다.
집에 오면 녹초가 되더라도 혼자 달리는 것이 참으로 어려운 일이지요. 특히 기초적인 것을 배울 때는 '내가 이것을 왜 해야 하지?'라는 의문을 품게 되기도 합니다. 모든 일에는 기본기가 있습니다. 그 기본기가 탄탄하게 잘 갖춰지면 모든 것이 쉬워질 수 있습니다. 다만 그 단계까지 참고 견디는 것이 힘든 것이지요. 독학이 어려운 이유 입니다. 함께 할 동료가 있다면 '눈치'가 보이거나 자존심 상할까 걱정해서라도 참고 하게 되니까요.
잘 되실 겁니다. 제가 응원하겠습니다. 건투를 빕니다!
감사합니다..^^ 힘내서 열심히 하겠습니다