정체불명의 모모

[C++/따배씨++]6.8 포인터와 정적 배열 본문

프로그래밍(c++)/따배씨++(기초)

[C++/따배씨++]6.8 포인터와 정적 배열

정체불명의 모모 2021. 8. 6. 18:00

이번 시간은 포인터와 정적 배열에 대해 알아보겠습니다.

 

if( 포인터 == Array) ?

답 : True

다만 Array는 자료구조 입니다. 근데 왜? 포인터와 같다고 하는걸까요???

이제 부터 알아 볼까요??


아래는 int 데이터형 5개의 데이터가 담긴 배열입니다.

정확히는 다섯개의 연이어져 있는 int의 값을 저장하는 메모리의 첫번째 Byte의 주소 입니다.

int array[5] = { 1,2,3,4,5};

그래서 array는 '포인터' 라고 하는 것 입니다.

cout << array << endl;
cout << &(array[0]) << end;;
cout << *array << endl;

과연 출력 값이 어떻게 나왔을까요?

1. 주소값(0x7ffeefbff510)  -> array의 첫번째 element의 주소
2.주소값(0x7ffeefbff510)  -> array의 첫번째 element의 주소
3. 1

위에 설명한 것과 같죠??ㅎㅎ

그럼 함수에 Array를 넣을 땐?

void doSomething(int array[ ])         // [ ] : 내부적으로 포인터이다.
{
     cout << sizeof(array) << endl;
     cout << *array << endl;

    *array = 100;
}

이번에도 한번 유추해 보자~ 답이 어떻게 나왔을지?

1. 4 or 8 (x86 / x64).    -> 포인터 변수의 메모리 크기
2. 1                                 -> first element value

함수에 array로 인자를 받으면 포인터로 인식하게 된다.

그리고 위에 *array = 100 -> 이것은 그대로 값이 외부에서 변경된다.

 

그렇다면, Struct or Class 도 똑같이 포인터로 인식 되나?

struct MyStruct
{
    int array[5] = {11,23,53,56,21};
}

int main()
{
     MyStruct ms;
     cout << ms.array[0] << endl;
     cout << sizeof(ms.array) << endl;
}

그것에 대한 답은 NO! 이다.

 

결과 출력을 보자.

1. 11
2. 20    -> int형 데이터가 5개라서  4Byte * 5

위의 결과와 같이 Class, Struct 안에 Array가 있으면 그 배열은 포인터로 인자를 받는 것이 아닌, 배열 그 자체로 데이터를 받습니다.

 


다음 이시간에....

Comments