Study

[C++] Array와 Pointer

시카Dev 2025. 2. 5. 12:33

포인터를 다시 공부하던 중 array와 비슷한 점이 있어 정리해본다.

 

<참고한 강의>

 

1. 배열의 이름을 출력하면 첫 번째 요소의 주소값이 나온다.

2, 포인터 변수는 주소값을 출력한다

3. 1번을 이용해서 포인터 변수와 배열은 거~의 동일하게 사용 가능하다

 

#include <iostream>

using namespace std;

int main()
{
   int arr[] = {1, 2, 3};
   
   cout << arr << endl;     // arr[0]의 주소값 출력
   cout << *arr << endl;    // arr[0]의 주소값 데이터 출력 = arr[0] 요소
   cout << arr[0] << endl;  // arr[0] 요소 출력
   cout << sizeof(arr) << endl; // arr의 크기 3x4B 출력
   
   return 0;
 
}
<결과>

0x7fffc0d2721c
1
1
12

 

1. cout << arr << endl;
arr[0]이 아니라 그냥 arr를 출력하면 첫번째 요소(=1)의 주소값이 나온다.

 

2. cout << *arr << endl;

이 점을 역참조해서, *arr는 첫번째 요소의 주소값 데이터(=1)을 반환한다

 

3. cout << arr[0] << endl;
똑같이 arr의 첫번째 요소를 반환한다

 

4. cout << sizeof(arr) << endl;
arr의 전체 사이즈 4x3 = 12를 반환한다

 

 

그렇다면 포인터는 어떠한가?

using namespace std;

int main()
{
   int arr[] = {1, 2, 3};
   
   int* arr_num = arr;      // arr[0]의 주소값 저장됨
   cout << arr_num << endl; // 동일하게 arr[0]의 주소값 출력
   cout << arr_num[0] << endl;  // 동일하게 arr[0] 요소 출력 
   cout << sizeof(arr_num) << endl; // '주소' 크기 4B or 8B 출력
   
   // 64bit로 컴파일 하면 포인터의 크기는 8B, 32bit로 컴파일 시 4B가 나온다.
   
   return 0;
   
}
<결과>

0x7fffc0d2721c
1
8

 

1. cout << arr_num << endl;

저장된 arr주소의 첫번째 주소를 반환한다. cout << arr << endl; 와 똑같다.

 

2. cout << arr_num[0] << endl;

동일하게 arr의 첫번째 요소를 반환한다.

 

3. cout << sizeof(arr_num) << endl;

arr배열 주소가 담긴 포인터 크기를 변환한다. 이때 컴파일러가 32bit라면 4바이트, 64bit라면 8바이트로 출력된다

 


int main()
{
   int arr[] = {1, 2, 3};
   int* arr_num = arr;  
   
   cout << (arr + 1) << endl;       // arr[1] 주소값 출력
   cout << (arr + 2) << endl;       // arr[2] 주소값 출력
   
   cout << (arr_num + 1) << endl;   // 동일하게 arr[1] 주소값 출력
   cout << (arr_num + 2) << endl;   // 동일하게 arr[2] 주소값 출력
   
   return 0;
   
}
<결과>

0x7fffc0d27220
0x7fffc0d27224
0x7fffc0d27220
0x7fffc0d27224

 

이처럼 배열과 포인터 동일하게 사용 가능하다

주소값이 4차이가 나는 이유는 배열 요소가 int형이므로, 4바이트 크기를 가지고 있어 그렇다

요소 하나당 4칸씩 차지한다면 4배수로 주소가 시작될 것이다

 


#include <iostream>

using namespace std;

int main()
{
   int arr[] = {1, 2, 3};
   int* arr_num = arr;      // arr[0]의 주소값 저장됨

   // 이하는 모두 arr[1] 요소가 출력된다. (=2)
   cout << *arr_num + 1 << endl;    
   cout << arr_num[1] << endl;      
   cout << arr[1] << endl;
   cout << *(arr + 1) << endl;
   
   return 0;
}
<결과>

2
2
2
2

 

응용하면 이렇게 사용 가능하다

전에 학교에서 중간고사 시험을 볼 때 포인터 출력값 5지선다 문제가 나왔었는데 그땐 개념이 잡히지 않아서 힘들었다

뿐만 아니라 두루 보았던 회사 필기시험이나 정보처리산업기사 필기 시험에도 포인터 문제는 꼭 물어보았다

 

정의를 정확하게 아는 것이 중요하지...

포인터의 개념은 확실히 잡은 뒤, 이것저것 두루두루 써보며 출력값으로 깨달아야 한다

'Study' 카테고리의 다른 글

[그래픽스] 벡터의 내적과 외적을 이해해보자  (0) 2025.01.23