포인터를 다시 공부하던 중 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 |
---|