프로그래밍

 3198, 1/160 회원가입  로그인  
   leonjodnc
   http://없어요
   C언어 배열과 포인터의 메모리 저장에서 궁금함이 생겨서 질문드립니다.

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6307 [복사]


변수를 크게 주소값, 내용값, 크기정보 라는 개념으로 이해하고 있습니다.

int num=10;
int arr[3]={1,2,3};
int * ptr = & num;

            
                     num              arr                  ptr

주소값         0x000010         0x000020          0x000030   :임의지정을 가정

내용값              10             0x000020         0x000010

크기정보        4바이트           12바이트          4바이트(32비트)

질문1. 이렇게 이해하며 넘어가도 괜찮을까요?

-------------------------------------------------------------------------------------
질문2. 배열arr과 arr[0]는 주소값이 같은데 내용값이 다르다? 실질적으로 메모리에 어떻게 저장되는지가 궁금합니다.

                arr(상수포인터)          arr[0]

주소값          0x000020           0x000020

내용값          0x000020                 1

크기정보         12바이트             4바이트

어떻게 같은 메모리 주소에 다른 내용이 입력되어 있는 지 궁금합니다.

----------------------------------------------------------------------------------------
질문3. 크기정보가 어떻게 메모리상에 저장되는 지도 궁금합니다.

결국 변수 num의 경우 4바이트에 00000000 00000000 00000000 00000010 이렇게

내용값으로만 저장이 된다면 크기 정보는 어디서 알 수 있게 되나요?

그렇다면 변수의 크기정보나 이런 것들을 다루는 다른 테이블이 존재하는 건가요?


바뿌신 중에도 고쳐야 할 부분이나 이해에 도움이 될만한 것을 검색할 수 있는 키워드를 주신다면

정말 감사하겠습니다. 복받으세요~.

  Hit : 6116     Date : 2013/02/20 11:17



    
leonjodnc 답변 감사합니다. 메모리상에 저장하는 형식은 아니군요. 그 약속을 어디에 표시하는 지를 찾아봐야겠네요. 감사합니다. 2013/02/22  
leonjodnc 헤드퍼스트 c를 통해서 이해하게 되었습니다. 포인터 변수는 메모리에 생성이 되고 배열 변수는 메모리에 할당이 되지 않는 다는 점이 나와있더군요. 대신 코드에 시작주소를 넣어줄 뿐이라고 설명되어 있습니다. 2013/02/27