추억의 컴퓨터 이야기

추억의 포인터 이야기

nullzone 2017. 12. 27.
반응형

추억의 포인터 이야기

갑자기 아는 후배녀석 블로그에서 아래와 같은 코딩이 이상하다고 올라온 글이 생각나서...

머리 식히는 의미에서 적어 봅니다.

(도스 프로그램밍 공부하면서 지긋지긋한 포인터가 생각이 나서요)


---------------------------------------------------------------------------------------

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개의 변수번지(포인터)가 들어갈 수 있다는 의미입니다. 


혹시 프로그래밍 하시는 분들은 이해하시는 지요?
















반응형

댓글