내 개인적인 공부/알고리즘
배열과 포인터 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안됨
배열만 가능