개발일지
article thumbnail
Published 2024. 1. 20. 00:33
C++ 포인터 프로그래밍/C++

int n = 100;

우리는 어떤 수나 문자를 저장하기 위해서 변수를 사용한다. 그러나 이 변수는 우리의 컴퓨터의 메모리에 어느 위치에 대한 이름인지를 나타낸 것이다.

친구랑 서울시청에서 모이기로 하였다. 서울 시청의 주소는 서울특별시 중구 세종대로 110이다. 우리는 후자와 전자로 말하여도 어디있는지 알 수 있지만 컴퓨터는 주소를 알아야 그 장소를 찾을 수 있다. 

그래서 이 n이라는 변수는 100이 저장되어있는 어느 메모리의 이름인 것이다.

 

 포인터(Pointer)

int* n;
int a = 10;
n = &a;

cout << "a의 주소 : " << &a << "\n";
cout << "n의 주소 : " << n << "\n";

 

포인터는 변수의 주소값을 저장하는 변수이다.

예를 들어, 변수 a에 10을 저장시키고, 포인터 n에게 a의 주소를 할당시킨다. 그리고 a의 주소와  n이 가르키고 있는 주소를 출력해보면 같은 값이 나올것이다. 즉 n은 a의 주소를 가르키는 함수이다.

 

인자전달

값전달에 대한 자세한 설명은 아래 글에 있다.

https://sayhello06.tistory.com/13

 

[C++] 함수 인수 전달 방식의 차이점 이해하기

함수 인수 전달 방식 C++에서 함수 인수 전달 방식은 크게 값에 의한 전달, 참조에 의한 전달, 포인터에 의한 전달의 세 가지 방법이 있습니다. 이 세 가지 방법은 각각의 장단점이 있으므로, 어떤

sayhello06.tistory.com

 

주소연산자와 역참조 연산

int a = 10;

cout << &a << "\n";
cout << *&a << "\n";

주소연산자 &로 변수의 주소를 확인할 수 있다.

또한 역참조 연산자 *로 주소값에있는 값에 접근할 수 있다.

 

동적  메모리 할당과 해제

int *n = new int;
*n = 123;

cout << "동적으로 할당된 변수의 값: " << *n << endl;  //123
delete n;

포인터는 동적으로 메모리를 할당하고 사용할 수 있다. new 연산자를 사용하여 메모리를 할당하고, 사용이 끝나면 메모리 누수를 줄이기 위해 delete연산자를 활용하여 메모리 할당을 해제 해주어야 한다.

 

int* n = new int[3];
delete[] n;

이렇게 동적으로 배열을 만들 수도 있다.

 

배열과 포인터

int numbers[] = {1, 2, 3, 4, 5};
int *arrayPointer = numbers;

cout << "첫 번째 요소: " << *arrayPointer << endl;  // 출력: 1
arrayPointer++; //배열은 연속된 주소값을 가지기 때문에 1의 다음수인 2가 된다.
cout << "두 번째 요소: " << *arrayPointer << endl;  // 출력: 2

배열은 포인터와 관련이 깊다. 배열의 이름은 해당 배열의 첫 번째 요소를 가리키기 때문에 포인터와 같은역할을 한다. 그래서 포인터변수에다가 배열을 할당시켜주면 그 배열에 접근할 수 있다.

 

 결론

C++의 핵심인 포인터는 이해하기 어렵지만 C++을 사용하려면 무조건 이해해야 하 개념이다. 포인터를 잘 활용하면 C++프로그래밍에서 메모리 관리와 유연한 데이터 조작을 할 수 있게된다.

profile

개발일지

@damin06

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!