그냥 게임개발자

배열과 포인터 Array to pointer decay 본문

내 개인적인 공부/알고리즘

배열과 포인터 Array to pointer decay

sudoju 2024. 4. 5. 00:28

배열의 이름 = 주소값이라는 소리를 어디선가 들어볼 수 있을 것이다.

이것을 Array to Pointer decay라고 한다.

 

int a[N]라는 N개의 크기를 가진 변수가 있다.

int *c = a;

이렇게 담을 수 있다?

int[]와 int는 서로 다른 타입이다...

근데 담을 수 있다.

???

 

 

ㅇㅇ 담을 수 있어요

그래서 Array to Pointer decay라는 것이다.

포인터는 배열의 이름을 담을 수 있다...!

 

어떠한 Type[N]이 Type*로 담을 수 있다는 것이다.

이렇게 담을 때

int* c = a;일 때! a의 크기는 decay! 크기가 부식이 된다는 것이다!

그리고 a는 배열의 첫번째 주소가 바인딩이 된다.

 

이게 Array to Pointer decay라는 현상이다.

포인터의 배열을 담게 되면 크기는 사라지고 주소가 바인딩이 되어 할당이 된다.

 

#include <iostream>

using namespace std;

int a[3] = {1, 2, 3};

int main() {
    int *c = a;             // Array to pointer decay
    cout << c << '\n';		// 배열의 첫번 째 주소
    cout << &a[0] << '\n';	// 배열의 첫번 째 주소
    cout << c + 1 << '\n';	// 배열의 두번 째 주소
    cout << &a[1] << '\n';	// 배열의 두번 째 주소
    return 0;
}

이런식으로 더하기 연산도 가능하다.

 

하지만 vector안됨

배열만 가능