Skip to content


심심풀이 C 언어 퀴즈에 도전

Jong10++:: 심심풀이 C 퀴즈 하나” 에서 트랙백

C 언어에서 포인터를 사용했을 때 주소 계산과 관련된 문제다. C 언어는 죽었다 깨도 강타입 언어라고 부르기 힘들다는 점을 이용한 문제1

포인터인 어떤 p에 대해서,

  • p + int_type 과 int_type + p 의 결과는 같고 (거의 교환 법칙)
  • 배열 인덱스 계산에서도 이런 종류의 교환 법칙 비슷한게 성립한다. 즉 a[index] = index[a]

정도가 성립한다.

이를 이용하면 int* a와, a + 2, 2 + a, &a[2], &2[a] 는 모두 같은 주소를 가리킨다.
그래서 Jong10님의 문제는 다음 코드로 검사해보면 되겠다. (물론 C의 포인터 계산을 알면 답은 앞에서 설명한 내용으로 추론할 수 있다)

int aa[] = { 0, 10, 20, 30 };
printf( "%d %d %d %d\n", aa[2], *(aa + 2), *(2 + aa), 2[aa] );

출력은 역시,

20 20 20 20

로 나온다 :)

  1. 사실 내가 사랑해 마지 않는 언어 C++도 이거랑 거의 비슷한 수준의 타입 시스템을 가지고 있다. 다만 타입 강제력이나 cast 연산자 같은 면에서는 약간의 발전이 있긴하다. []
이 저작물은 별도로 명시하지 않은 경우, Creative Commons Attribution-Share Alike 3.0 Unported License에 따라 이용하실 수 있습니다.

Posted in Computer.

Tagged with , .


One Response

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. kors21 says

    잘 모르시는 분들을 위해서 코멘트 살짝 남겨봅니다.

    C가 내부적으로 a[b]를 *(a+b)로 해석하기 때문에 가능한 일입니다.
    + 는 아시다시피 commutative 합니다.



Some HTML is OK

or, reply to this post via trackback.