728x90
C++에서 포인터는 메모리 주소를 저장하는 변수입니다. 포인터를 사용하면 변수의 주소를 직접 조작할 수 있으며, 이를 통해 동적 메모리 할당, 배열과 문자열 처리, 함수 인자 전달 시 효율성을 높일 수 있습니다.
1. 포인터의 기본 개념
- 포인터 선언: 포인터는 특정 데이터 타입의 변수의 주소를 저장합니다. 포인터를 선언할 때는 데이터 타입 뒤에 * 기호를 붙입니다.
int* ptr; // int형 포인터 ptr 선언
- 주소 연산자 &: 변수의 주소를 얻기 위해 & 연산자를 사용합니다.
int a = 10; int* ptr = &a; // a의 주소를 ptr에 저장
- 역참조 연산자 *: 포인터가 가리키는 주소의 값을 얻기 위해 * 연산자를 사용합니다.
int value = *ptr; // ptr이 가리키는 주소의 값을 가져옴 (a의 값)
2. 포인터의 사용
2.1. 기본적인 포인터 사용 예
#include <iostream>
int main() {
int a = 10;
int* ptr = &a; // a의 주소를 ptr에 저장
std::cout << "a의 값: " << a << std::endl; // 10
std::cout << "a의 주소: " << &a << std::endl; // a의 메모리 주소
std::cout << "ptr의 값 (a의 주소): " << ptr << std::endl; // a의 메모리 주소
std::cout << "ptr을 통해 가져온 a의 값: " << *ptr << std::endl; // 10
return 0;
}
2.2. 동적 메모리 할당
C++에서는 new 연산자를 사용하여 동적으로 메모리를 할당하고, delete 연산자를 사용하여 메모리를 해제할 수 있습니다.
#include <iostream>
int main() {
int* ptr = new int; // int형 변수를 위한 메모리 동적 할당
*ptr = 20; // 메모리 주소에 값 할당
std::cout << "동적 할당된 값: " << *ptr << std::endl; // 20
delete ptr; // 메모리 해제
ptr = nullptr; // 포인터 초기화
return 0;
}
2.3. 배열과 포인터
배열 이름은 배열의 첫 번째 요소의 주소를 나타내므로, 포인터와 배열은 밀접한 관계가 있습니다.
#include <iostream>
int main() {
int arr[3] = {1, 2, 3};
int* ptr = arr; // 배열의 첫 번째 요소의 주소를 ptr에 저장
for (int i = 0; i < 3; ++i) {
std::cout << "arr[" << i << "] = " << *(ptr + i) << std::endl; // 포인터를 통해 배열 접근
}
return 0;
}
3. 포인터의 중요성
- 효율적인 메모리 사용: 포인터를 사용하면 메모리를 직접 관리할 수 있어, 대용량 데이터 처리 시 메모리 사용을 최적화할 수 있습니다.
- 함수 인자 전달: 포인터를 사용하여 함수에 인자를 전달하면, 인자의 복사 없이 원본 데이터를 수정할 수 있습니다.
#include <iostream>
void increment(int* ptr) {
(*ptr)++; // ptr이 가리키는 값 증가
}
int main() {
int a = 5;
increment(&a); // a의 주소를 전달
std::cout << "증가된 값: " << a << std::endl; // 6
return 0;
}
4. 포인터의 주의사항
- 널 포인터: 포인터가 아무것도 가리키지 않도록 초기화할 때는 nullptr를 사용합니다.
- 메모리 누수: 동적 할당한 메모리는 사용 후 반드시 해제해야 하며, 그렇지 않으면 메모리 누수가 발생합니다.
- 포인터 연산: 포인터를 사용하여 메모리 주소를 직접 조작할 수 있지만, 잘못된 접근은 프로그램의 비정상 종료를 초래할 수 있습니다.
728x90
'반도체 > C++' 카테고리의 다른 글
38. C++ 화살표 연산자 (0) | 2024.09.04 |
---|---|
36. C++에서 배열과 포인터 관계 (0) | 2024.09.03 |
34.1 사원 관리 프로그램 추가 C++ (0) | 2024.09.03 |
34. 사원관리 프로그램 C++ (0) | 2024.09.03 |
33. C++의 GET & SET (1) | 2024.09.03 |