#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int imsi[2][3] = {{1,2,3,},{10,20,30}};
int (*imsip)[3];
int i = 0;
int j = 0;
imsip = imsi;
for(i=0; i<6; i++)
{
printf("%d\n", *(*(imsip+j)+i) );
}
system("PAUSE");
return 0;
}
일단 이렇게 하면 원하시는 결과가 출력됩니다.
문제는... 왜 이렇게 되는 것인가를 설명하는건데...
글로 쓰려니 참 막막하네요. ^^;
상당히 불친절하고, 영양가 없는 설명을 해보겠습니다.
imsip 요놈이 포인터라는건 아시겠죠?
그런데 imsip 요놈이 보통 포인터가 아니라
한번에 3칸을 건너뛰는 놈입니다.
실제 메모리에는
[1] [2] [3] [10] [20] [30]
이렇게 연달아 6개가 이어져 있는데...
imsip 가 하나 증가할 때마다 메모리를 3칸씩 팍팍 움직이기 때문에
1칸 단위로 조금씩 움직여야 할 때는 보조단위(?)로 움직여야 하죠..
*(*(imsip+j)+i) --->> 요놈을 곰곰히 한 번 보세요.
2차원 배열하고 비슷해 보이지 않나요? ^^;
imsip[j][i] 로 고쳐 쓸수도 있습니다.
j가 1씩 증가하면 메모리에서 3칸씩 움직이구요.
i가 1씩 증가하면 메모리에서 1칸씩 움직이지요.
제가 올린 소스에서
printf("%d\n", *(*(imsip+j)+i) ); 이 부분을
printf("%d\n", imsip[j][i] ); 이렇게 고쳐도 똑같은 결과가 나온답니다.
곰곰히 한 번 살펴보시고 찬찬히 생각해 보세요.
그럼... ^^;
뒷말 : bmp 파일보다는 jpg 파일로 올리시는게 더 좋을 것 같네요. 용량이 커서 부담이 되네요.
귀찮으셔도 직접 텍스트로 소스를 올리시는 것도 좋겠구요
|