포인터와 배열의 개념을 확실히 잡기 위해 아래와 같은 실험을 해보았다.
#ads_1
#include <iostream>
#include <conio.h>
using namespace std;
class XY{
public:
int nX, nY;
};
int main(){
XY xy[10];
XY *ptr;
ptr = xy;
//1번
ptr->nX = 1;
ptr->nY = 2;
//2번
(*(ptr+1)).nX = 3;
(*(ptr+1)).nY = 4;
//3번
ptr[2].nX = 5;
ptr[2].nY = 6;
//4번
(*(ptr+3)).nX = 7;
(*(ptr+3)).nY = 8;
cout << ptr[0].nX << ", " << ptr[0].nY << endl;
cout << ptr[1].nX << ", " << ptr[1].nY << endl;
cout << ptr[2].nX << ", " << ptr[2].nY << endl;
cout << ptr[3].nX << ", " << ptr[3].nY << endl;
//5번
xy[4].nX = 7;
xy[4].nY = 8;
//6번
(&xy[5])->nX = 9;
(&xy[5])->nY = 10;
//7번
(&xy[0]+6)->nX = 11;
(&xy[0]+6)->nY = 12;
//8번 : 배열이름 xy는 &xy[0] 으로 자동 변환된다
(xy + 7)->nX = 13;
(xy + 7)->nY = 14;
cout << xy[3].nX << ", " << xy[3].nY << endl;
cout << xy[4].nX << ", " << xy[4].nY << endl;
cout << xy[5].nX << ", " << xy[5].nY << endl;
cout << xy[6].nX << ", " << xy[6].nY << endl;
cout << xy[7].nX << ", " << xy[7].nY << endl;
getch();
return 0;
}
실행결과 :
1, 2
3, 4
5, 6
7, 8
9, 10
11, 12
13, 14
<결론>
포인터를 배열형태로 사용할때는 컴파일시 포인터형태로 변환되어 해석되고
배열의 이름은 &배열이름[0] 형태로 변환되어 해석된다
※ 참고
함수의 파라미터에서 배열은 아래와 같이 변환된다
변환 전
void f(char a[])
{ ... }
변환 후
void f(char *a) { ... }
#ads_1