| [ OpenDiary ] in KIDS 글 쓴 이(By): zilch (_) 날 짜 (Date): 2006년 2월 22일 수요일 오후 09시 21분 24초 제 목(Title): 바보 형제 오늘 붙잡고 있던 문제는 어떻게 하면 기존의 코드를 덜 고치고 간단한 수정 만으로 원하는 작업을 수행할 수 있을까 라는 것이었다. 코드는 모두 C로 작성되어 있어서 간단한 포인터 꼼수로 해결하려고 했다. 그런데, 역시 나이가 나이인지라 확신이 들지 않아서 다음과 같은 코드를 테스트했다. char (*x)[10]; x = (char (*)[10]) malloc(10 * 2); 이것을 동료에게 보여주니, 그 친구는 완전히 다르게 해석한다. x[1]은 x[0] 시작점으로부터 +4 byte 만큼 떨어져 있다는 것이다. 나의 의도는 물론 x[0..1][0..9] 의 "진짜" 2차원 배열을 실행중에 할당하는 것이다. (10 byte 차이가 나야 한다) x[0]과 x[1]의 주소를 찍어 보면 누가 맞는지 알 수 있다. 결과는 8과 12가 나왔다. 말도 안되는 일이라고 생각하여, K&R C 책을 꺼내 들고 한참 토론한 다음에 결국 내 말이 맞다고 이해시켰다. 그러면 도대체 8과 12는 어떻게 된 것인가? 화면을 물끄러미 바라보던 둘은 동시에 무슨 일인지 깨달았다. 그건.. 16진수였다. |