이 코드로인해서 ㅅㅅㅅ의발언처럼 컴파일러가 미리 생성해놓은 메모리에 변수를 배정하던 , 동적으로 메모리를 할당받던간에 그 시작주소값은 단순히 메모리의시작주소만을 가리키는게아니라 또한 메모리의크기 즉, 그 메모리의 구조가 어떻게 생겨먹엇냐도 말해줌.


8행의 반복문에서 동적으로 40바이트를할당받고 그 시작주소값을 대입받은 ptr에다가 알게모르게 포인터연산을 취하고잇음.

i값이 1씩증가하고잇는데 , 처음엔 *(ptr+0)가맞음 하지만 그다음은? 

 그다음반복문에선 *(ptr+1)  << 이건틀린거임

6행에서 동적할당받앗을떄 내추측이지만 (맞을거임 아니맞다고봄 무조건맞음) 40바이트를할당받을떄 이 40바이트는 int형에맞게 4바이트씩 넣을수잇도록 구조가그렇게만들어졋을거임. 아마 sizeof(int)*10 에서 됫다고본다.

따라서 *(ptr+1)이아니라 *(ptr+4) or *(ptr+ (sizeof(int)) ) 가 맞는거임.

그래서 3000 , 3004, 3008 ... 이렇게 증가하는거고 ㅎ


그리고 마지막으로 포인터변수는 단순히 포인터값을 취할수잇는 변수이고 , 맨처음에 컴파일러에게 " 배정 " 받을떄 배정받은 그 메모리공간(1000~1003이라고가정)은 프로그램이꺼질떄까지 존재하며 ,  6행의문장으로인해서 이 메모리영역에 동적할당받은시작주소값이 들어가게되는거지. 따라서, 4행,19행의 출력문에서 배정받은 메모리의시작주소값을 출력하고있는거임. 

한번만더말한다. 포인터변수는 단순히 포인터값을취할수잇는변수이고 , 처음에배정받은 메모리공간은 절대로 바뀌지않는다.  한마디로 포인터값을 값으로취하는거임씨발 ㅡㅡ 포인터변수가 시작주소값을 알고있으면  그 영역을 controll할수있따  이게 포인터의꽃이다



ㅅㄱㅎ