[질문] C언어 배열에서...
풍란
main()
{
int a[]={1,2,3}, i;
for (i=0 ; i3 ; i++)
printf(a[%d] = %d, i, a[i]);
printf(\n\n);
for (i=0 ; i3 ; i++)
printf(%d[a] = %d, i, i[a]);
}
첫번째 for문하고 두번째 for문하고 값은 같게 나오는데 왜 그런가요??
*********************************************************************
실행시켜 보면
*********************************************************************
a[0]=1a[1]=2a[2]=3*****************************************
1[a]=12[a]=23[a]=3*****************************************
*********************************************************************
값이 위처럼 나오거든요
왜 이렇게 나오나요??
-
소미
ㅎㅎ 그렇져^^ 이론적으로 a+i[0]이나 0[a+i]도 동일합니다.
-
겨울
감사합니다.
-
콩알눈
자료구조론에보면 설명되어있습니다. 배열인덱스계산은 포인터연산과 동일하거든요 a[0] - *(a+0)이죠 사실 자리바꿔도 상관없습니다. 0[a]라고 해도말이죠..
-
에드가
i[a]도 i+a게 계산되는 구나~~책에는 설명이 안 되어 있어서요...감사합니다.
-
천칭자리
배열도 굉장히 공부할것이 많습니다. 배열을 조금 깊게 공부하시면 포인터는 가볍게 넘기실수 있습니다. 배열이 곧 포인터이기도 하거든요^^b
-
사에
배열에서 메모리 주소를 계산하는 방식때문에 그렇습니다.^^ 컴파일러는 배열의 주소값을 계산할때 a[i]를 a+i로 계산하죠^^ 마찬가지로 i[a]도 i+a로 계산하게되는거져 즉, 배열의 시작 주소는 a이고 거기다가 i를 더해주는것 뿐이므로 같은 메모리 주소를 가지게 되는것입니다.
-
단순랩퍼
호오.. 신기하군요 ^^ i는 배열이 아닌데도 저렇게 실행이 되다니...
이유는 모르겠습니다 ^^;..