|
답변 감사드리고요
10개의 요소가 있는 배열을 선언할때 첨자를 10으로 주었는데도 에러가 안났습니다.
그리고 출력을 15개씩 한건 쓰레기값을 볼려구 그랬던 겁니다.
감사합니다.
오전&오후 님이 쓰신 글 :
: 포인터변수라는게 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의 주소를 출력하시면서 왜 포인터크기를 매칭할려는건지
: 이해가 안되는군요...^^;
:
|