# 포인터와 배열
int main()
{
using namespace std;
int array[5] = { 9, 7, 5, 3, 1 };
cout << array << endl; // 배열 이름, 005DF954
cout << &array[0] << endl; // 005DF954
int *ptr = array;
cout << ptr << endl; // 005DF954
}
- array 이름을 출력하면, 주소가 나온다.
- & 연산자로 주소를 출력해도 같은 주소가 나온다.
- array, &array[0]
- *array, array[0]
- de-referencing array = 배열의 첫번째 원소를 직접 참조함.
# 포인터와 배열이름의 차이점
int array[5] = {0, 1, 2, 3, 4};
int * ptr = array;
sizeof(array) // 20
sizeof(ptr)) // 4
- sizeof 함수로 배열을 출력하면, 배열의 총 메모리 공간을 출력한다. 20 byte
- sizeof 함수로 포인터 변수를 출력하면, 주소를 담고 있는 포인터의 크기만 출력한다. 4 byte
# 함수 매개변수로 배열을 넘길 때
void printArray(int *array)
{
cout << sizeof(array) << endl; // 배열이 넘어온듯 보이지만, 지역변수 array 는 포인터이기 때문에, 4 만을 출력한다.
}
int main()
{
int array[5] = { 9, 7, 5, 3, 1 };
int *ptr = array;
printArray(array);
printArray(ptr);
}
- 함수의 매개변수로 배열을 넘길 때에는 포인터로서 전달된다. ( 주소만 복사해서 넘김 )
- 매개변수를 포인터로 선언하여, 배열의 첫번째 원소의 주소로 접근할 수 있으므로 효율적이다.