플밍

배열과 포인터 테스트 본문

프로그래밍/C/C++

배열과 포인터 테스트

너구리안주 2013. 9. 5. 13:08

포인터와 배열의 개념을 확실히 잡기 위해 아래와 같은 실험을 해보았다.

#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

Comments