|
포인터변수라는게 4byte라는 애기는요..
음 예를 들어서 int *i, char *k;
이렇게 포인터변수를 선언했다고 하면요..
i나k는 둘다 4byte라는 애기입니다..
즉 포인터 변수는 데이타형에 상관없이 동일한 byte를 같는다는 애기지요..
이것도 테스트 해보시면 바로 확인하실수 있습니다..
char a[10]="abcdefghij";
char b[4]="opqr";
char *ptra, *ptrb;
a의 크기는 10byte고 b의 크기는 4byte입니다..
그리고 ptra, ptrb는 4byte입니다..
그리고 a[10]을 a[11]로 b[4]는 b[5]로 해주셔야 겠네요...
이유는 아시겠지요...^^;
(이거 컴파일러에서 Error날텐데...)
ptra=&a[0];
ptrb=&b[0];
그리고 포인터의 값에 배열의 시작주소를 주셨는데..
여기서 ptra나 ptrb에서는 증가포인터는 1byte가 됩니다.
즉 ptra + 1을 하시면 ptra의 포인터에서 1byte증가하게 되는겁니다.
결과에서도 보시면 아시겠지만 전부 1byte씩 증가했지요..?
그리고 출력을 이상하게 해주셨네요..
for(i=0;i<=15;i++) <- 여기서왜 15까지인가요..??
printf("Address of ptr a : %p \t a[%d] : %c\n",(ptra+i),i,a[i]);
for(i=0;i<=10;i++) <- 그리고 이거는 왜 10까지 인가요..??
printf("Address of ptr b : %p \t b[%d] : %c\n",(ptrb+i),i,b[i]);
포인터변수인 ptra나 ptrb는 a나 b와는 상관없는 다른곳에
잡혀있습니다..즉 ptra나 ptrb는 a와b의 시작주소를 가리키고 있는 포인터 변수입니다.
메모리의 어느공간에 잡혀있겠지요..그리고 자체주소값도 가지고 있고 그 주소에 들어있는
데이터값을 보시면 a나b의 시작번지값이 들어가 있지요..
그리고 출력하시는 배열 a,b의 주소는 포인터크기와는 상관없습니다..
지금 a와 b의 주소를 출력하시면서 왜 포인터크기를 매칭할려는건지
이해가 안되는군요...^^;
|