추억의 포인터 이야기
갑자기 아는 후배녀석 블로그에서 아래와 같은 코딩이 이상하다고 올라온 글이 생각나서...
머리 식히는 의미에서 적어 봅니다.
(도스 프로그램밍 공부하면서 지긋지긋한 포인터가 생각이 나서요)
---------------------------------------------------------------------------------------
int main(int argc, char* argv[])
{
int buffer[1024];
printf("%d\t%d\t%d\n", &buffer[50], &buffer[40], &buffer[50]-&buffer[40]);
}
[halloo@techbox merger]$ gcc a.c
[halloo@techbox merger]$ ./a.out
-1073946648 -1073946688 10
제가 아는 후배녀석이 위와 같은 프로그램을 짜고 나서 너무 이상하다고 합니다.
a 값 : -1073946648
b 값 : -1073946688
a-b는
답은 40이 아니고 10으로 나옵니다.
---------------------------------------------------------------------------------------
왜?
a-b는 우리가 흔히 아는 산수로는 a 빼기 b 입니다.
빼기라는 개념을 잘 이해 하셔야 합니다.
가령 10 - 7 은 3이 됩니다.
그러나 여기에는 엄청난 비밀이 숨어 있습니다.
십진수 10 에서 십진수 7을 뺀다라는 의미는 십진수 10과 십진수 7 사이에 들어갈수 있는
십진수의 갯수를 의미한다는 것이지요...
즉, 이 두개의 숫자사이에는 3개의 십진수가 들어간다는 의미입니다.
위의 코딩에서 보면 변수 번지 -1073946648 와 -1073946688 의 사이에 들어갈 수 있는
변수번지(포인터)는 몇개라는 의미지요?
당연히 40의 변수번지(포인터)가 아닌 10개의 변수번지(포인터)가 들어갈 수 있다는 의미입니다.
혹시 프로그래밍 하시는 분들은 이해하시는 지요?
'추억의 컴퓨터 이야기' 카테고리의 다른 글
Web Browser Opera for win3.x (0) | 2017.12.27 |
---|---|
[Util] 윈도우에서 조합형,완성형, 한글문서를 편하게 보자 (0) | 2017.12.27 |
DOS7.1과 윈도우즈3.x (0) | 2017.12.27 |
불법소프트웨어 때문에 당한 어처구니없던 일 (0) | 2017.12.27 |
FreeDos와 관련되어서 (0) | 2017.12.27 |
[Util] 도스용 데스크탑 유틸 NEW (0) | 2017.12.27 |
virtual PC에서 자료 공유 (0) | 2017.12.27 |
[Game] XCOM2(Terror From the Deep) (0) | 2017.12.27 |
댓글