이 코드로인해서 ㅅㅅㅅ의발언처럼 컴파일러가 미리 생성해놓은 메모리에 변수를 배정하던 , 동적으로 메모리를 할당받던간에 그 시작주소값은 단순히 메모리의시작주소만을 가리키는게아니라 또한 메모리의크기 즉, 그 메모리의 구조가 어떻게 생겨먹엇냐도 말해줌.
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할수있따 이게 포인터의꽃이다
ㅅㄱㅎ
던->든
주소값->주솟값
됫->됐
아가리닥치세요
주솟값은 틀리다 주소값이 맞다
사이시옷 검색해보고 와라
이 코드로인해서 ㅅㅅㅅ의발언처럼 컴파일러가 미리 생성해놓은 메모리에 변수를 배정하던 , 동적으로 메모리를 할당받던간에 그 시작주소값은 단순히 메모리의시작주소만을 가리키는게아니라 또한 메모리의크기 즉, 그 메모리의 구조가 어떻게 생겨먹엇냐도 말해줌. <--- 멍청이
그다음반복문에선 *(ptr+1) << 이건틀린거임 <--- 멍청이 2
제대로 이해 못한걸 사람들앞에 선언하고 있으니 한심하다.
바보선언이냐.
시발 그만해라...
http://gall.dcinside.com/programming/498971
여긴왜 코멘트없음? 완벽함?
설명이 몽땅 다 틀렸어
메모리의 시작주소 값은 말 그대로 시작 주소 값일 뿐이고 포인터의 type이 그 메모리에 할당된 값을 표현하기 위해 몇 바이트가 필요한지 말해주는 거야
*(ptr+1)은 틀린 표현이 아니고, ptr의 시작 주소에 sizeof(int) 오프셋을 더한 곳에 엑세스를 시도하라는 의미일 뿐..
포인터 변수의 메모리 공간은 프로그램이 꺼질 때까지 존재하는 것도 아니고 해당 지역 변수의 scope에 해당하는 함수의 stack frame이 생성될 때 메모리가 확보되었다가 리턴할 때 없어짐 (정확히는 쓸모없는 메모리로 표현되기만 하고 값을 당장 지우는 건 아니지만...)
이런 실력으로 ㅅㅅㅅ한테 덤비려고 해봤자 승산이 없어. 걘 이런거 가지고 헷갈려서 싸울 수준은 아니라고 봄