오늘은 포인터에 대한 수업을 진행하였다.
포인터란?
포인터는 프로그래밍 언어에서 다른 변수의 메모리 주소를 가리키는 변수이다. 즉, 포인터는 특정 변수가 저장된 메모리의 위치(주소)를 가리키며, 이 주소를 통해 해당 변수의 값을 참조하거나 조작할 수 있다.
간단한 예로, 컴퓨터 바탕화면의 바로가기를 생각해 보자. 메모장을 실행할 때 메모장 바로가기를 사용하면, 바로가기는 실제 메모장의 위치를 가리키는 역할을 하게 된다. 여기서 메모장은 변수이고, 바로가기는 포인터에 해당된다.
포인터 사용 시 주의사항
- 널 포인터 체크는 중요하다
널 포인터(NULL)는 포인터가 아무것도 가리키지 않음을 의미한다. 포인터가 유효한 주소를 가리키고 있는지 확인하지 않으면 프로그램이 잘못된 메모리에 접근할 수 있기 떄문이다. - 포인터가 가리키는 데이터의 유효성은 보장되지 않는다
포인터가 특정 메모리 주소를 가리키고 있어도 그 주소에 실제로 값이 존재할지는 보장되지 않는다. 가리키는 데이터의 유효성을 항상 확인해야 한다. - 포인터로는 데이터의 유형을 알 수 없다
포인터는 단순히 주소를 저장하는 변수이므로, 가리키는 데이터가 어떤 형식인지 직접 알 수 없다. 예를 들어 int* p;라는 선언은 p가 int형 데이터를 가리킬 것이라고 약속하지만, 실제로 가리키는 값은 프로그래머가 관리해야 합다. - C++에서는 포인터와 변수가 서로 직접적으로 연결되어 있지 않다
포인터는 변수가 저장된 주소만 알고 있으며, 그 변수가 어떤 변수인지 포인터 자체는 알 수 없다. 이를 관리하는 것은 프로그래머의 역할 - 포인터 전달은 Call by Value 방식이다
포인터도 변수이기 때문에 함수에 전달될 때 값이 복사된다. 즉, 포인터 자체가 복사되어 전달되는 것이다. 다만, 복사된 포인터는 동일한 메모리 주소를 가리킨다. - 포인터는 메모리 주소를 저장하는 독립적인 변수이다
포인터 자체도 하나의 메모리 공간을 차지하며, 그 안에 저장된 값은 메모리 주소이다.
#include <iostream>
int main()
{
int nData1{};
int* p{};
nData1 = 10;
p = &nData1;
printf("%d\n", nData1);
printf("%p\n", &nData1);
printf("%d\n", *p);
printf("%p\n", p);
printf("%p\n", &p);
}
[ 주요 연산자 설명 ]
- & (주소 연산자): 변수 앞에 사용하여 해당 변수의 메모리 주소를 반환합니다.
- * (참조 연산자): 포인터가 가리키는 주소의 값을 참조할 때 사용합니다.
- % p: 메모리 주소를 출력할 때 사용하는 서식 지정자입니다.
[ 결과 값 ]
- nData1에 저장된 값
- nData1의 메모리 주소
- 포인터 p가 가리키는 값 (nData1에 저장된 값)
- 포인터 p의 값 (즉, nData1의 주소)
- 포인터 변수 p 자체의 메모리 주소
문제: int형 숫자 3개를 입력받아 가장 작은 수를 포인터로 가리키고 출력하라.
#include <iostream>
int main()
{
int n1{};
int n2{};
int n3{};
int* pMin{};
scanf_s("%d", &n1);
scanf_s("%d", &n2);
scanf_s("%d", &n3);
pMin = &n1;
if (*pMin > n2)
pMin = &n2;
if (*pMin > n3)
pMin = &n3;
printf("%d\n", *pMin);
}
- int형 변수 n1, n2, n3와 int형 포인터 *pMin을 선언 ( pMin은 가장 작은 수의 주소를 저장할 포인터 )
- scanf_s 함수로 n1, n2, n3의 값을 입력받아 각각 변수 저장
- 포인터 pMin에 n1의 주소값을 저장 ( 초기에는 n1이 가장 작은 값일 가능성이 있다고 가정 )
- pMin이 가리키는 값과 n2의 값을 비교, 만약 pMin이 가리키는 값이 n2보다 크면, pMin에 n2의 주소값을 저장하여, 더 작은 값을 가리키도록 업데이트한다.
- 다시 한 번 pMin이 가리키는 값과 n3의 값을 비교한다. 이번에도 더 작은 값이 있으면 pMin에 n3의 주소값을 저장한다.
- 최종적으로 pMin이 가리키는 값, 즉 가장 작은 값을 출력한다.
'C++' 카테고리의 다른 글
[강의] 9월 26일 수업정리 (1) | 2024.09.27 |
---|---|
[강의] 9월 25일 수업정리 (1) | 2024.09.26 |
[강의] 9월 13일 수업정리 (0) | 2024.09.14 |
[강의] 9월 12일 수업정리 (0) | 2024.09.12 |
[강의] 9월 11일 수업정리 (0) | 2024.09.11 |