C++ 학습: 포인터와 참조
C++에서 포인터와 참조는 메모리와 데이터를 효율적으로 다루기 위한 중요한 도구입니다. 이번 글에서는 포인터 개념, 포인터와 배열, 동적 메모리 할당, 그리고 참조에 대해 알아보겠습니다.
1. 포인터 개념: 포인터의 기본 개념과 사용법
포인터는 변수의 메모리 주소를 저장하는 변수입니다. 포인터를 선언하려면 변수 자료형 앞에 *를 붙입니다. 포인터의 기본 사용법은 다음과 같습니다.
포인터 선언과 사용
using namespace std;
int main() {
int var = 10;
int *ptr = &var; // 포인터 ptr은 변수 var의 주소를 저장
cout << "var의 값: " << var << endl;
cout << "ptr이 가리키는 값: " << *ptr << endl; // 포인터를 통해 변수 var의 값에 접근
return 0;
}
위의 예제에서 int *ptr은 정수를 가리키는 포인터를 선언합니다. &var는 변수 var의 주소를 반환하고, *ptr을 통해 포인터가 가리키는 변수의 값에 접근할 수 있습니다.
2. 포인터와 배열: 배열과 포인터의 관계
배열의 이름은 배열의 첫 번째 요소의 주소를 가리키는 포인터로 해석됩니다. 배열과 포인터의 관계는 다음과 같습니다.
포인터와 배열 사용 예
using namespace std;
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr; // 배열 이름은 첫 번째 요소의 주소를 가리킴
for (int i = 0; i < 5; i++) {
cout << "arr[" << i << "] = " << arr[i] << ", *(ptr + " << i << ") = " << *(ptr + i) << endl;
}
return 0;
}
위의 예제에서 int *ptr = arr은 배열 arr의 첫 번째 요소의 주소를 ptr에 저장합니다. *(ptr + i)를 통해 배열의 요소에 접근할 수 있습니다.
3. 동적 메모리 할당: new와 delete
동적 메모리 할당은 프로그램 실행 중에 필요한 메모리를 동적으로 할당하는 방법입니다. C++에서는 new와 delete를 사용하여 동적 메모리를 관리할 수 있습니다.
동적 메모리 할당 예제
using namespace std;
int main() {
// 정수를 위한 동적 메모리 할당
int *ptr = new int;
*ptr = 10;
cout << "동적으로 할당된 정수: " << *ptr << endl;
delete ptr; // 메모리 해제
// 배열을 위한 동적 메모리 할당
int *arr = new int[5];
for (int i = 0; i < 5; i++) {
arr[i] = i + 1;
}
for (int i = 0; i < 5; i++) {
cout << "arr[" << i << "] = " << arr[i] << endl;
}
delete[] arr; // 배열 메모리 해제
return 0;
}
위의 예제에서 new를 사용하여 정수와 배열을 위한 메모리를 동적으로 할당하고, delete와 delete[]를 사용하여 할당된 메모리를 해제합니다.
4. 참조: 참조자와 포인터의 차이
참조자는 변수의 별명(alias)으로, 변수의 주소를 저장하는 포인터와 다르게 변수 자체를 가리킵니다. 참조자는 선언 시 초기화가 필요하며, 한 번 초기화되면 다른 변수를 참조할 수 없습니다.
참조자 사용 예
[cpp]
#include <iostream>
using namespace std;
int main() {
int var = 10;
int &ref = var; // 참조자 ref는 변수 var를 참조
cout << "var의 값: " << var << endl;
cout << "ref의 값: " << ref << endl;
ref = 20; // ref를 통해 var의 값을 변경
cout << "var의 값(변경 후): " << var << endl;
cout << "ref의 값(변경 후): " << ref << endl;
return 0;
}
참조자와 포인터의 차이
- 참조자 : 선언 시 반드시 초기화해야 하며, 한 번 참조하면 다른 변수를 참조할 수 없습니다. & 연산자를 사용하지 않고도 변수처럼 사용할 수 있습니다.
- 포인터 : 선언 후 나중에 초기화할 수 있으며, 포인터 변수를 통해 다른 변수를 가리킬 수 있습니다. * 연산자를 사용하여 값을 참조합니다.
이번 글에서는 C++의 포인터와 참조에 대해 알아보았습니다. 포인터의 기본 개념과 사용법, 포인터와 배열의 관계, 동적 메모리 할당, 그리고 참조자와 포인터의 차이를 이해하는 것은 C++ 프로그래밍의 중요한 부분입니다. 다음 단계에서는 구조체와 클래스 개념을 학습해보세요. Happy Coding!
'프로그래밍 > C++' 카테고리의 다른 글
[C++] 7. C++의 "객체 지향 프로그래밍" (0) | 2024.06.17 |
---|---|
[C++] 6. C++의 "구조체와 클래스" (0) | 2024.06.17 |
[C++] 4. C++의 "배열과 문자열" (0) | 2024.06.14 |
[C++] 3. C++의 "함수" (0) | 2024.06.14 |
[C++] 2. C++의 "기본 문법" (0) | 2024.06.14 |