C배열에서 왜 a[1] == 1[a]인가요?


발생하는 문제 및 실행환경

친구가 이상한 기능 찾았다면서 보내준 코든데요 1[a] 써도 컴파일도 잘되고 실행도 잘돼요. 이게 어떻게 된 거죠?

소스코드

int main(){
    int* a = (int*)malloc(sizeof(int)*2);
    a[0] = 1;
    a[1] = 2;
    printf("%d\n", a[1]);
    printf("%d\n", 1[a]);//????????
}
  • 2016년 01월 29일에 작성됨

조회수 195


1 답변


좋아요
0
싫어요
채택취소하기

C 표준의 [] 오퍼레이터 정의는 a[b] == *(a + b) 입니다.

즉, 이 경우

  • a[1] = *(a + 1)
  • 1[a] = *(1 + a)

로 계산됩니다. 덧셈은 교환 법칙이 성립하기 때문에 (a+1) = (1+a)이고, 따라서 이 둘의 계산 결과가 같기 때문에 주소 값을 찾아가도 똑같은 결과가 나옵니다

  • 2016년 01월 29일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close