포인터

 

C++에서의 포인터 개념은 C언어와 크게 다르지 않다. 

포인터는 주소를 사용한다. 

주소를 사용하는 이유는 우리가 특정 메모리 공간에 있는 값을 다른 장소에서

수정할 수 있도록 하기 위해서 사용한다.

 

1-0

1-0 이미지와 같이 기존에는 main 함수 내에 지역변수로써 선언된 a 변수 값과 

aaa 함수 내에 매개변수로써 선언된 a 변수 값이 저장된 공간이 다르기 때문에 

aaa 함수 내에서 a 변수(매개변수)에 값을 바꾸더라도 main 함수 내에 있는 a 변수(지역변수)에 영향을 미치지 않는다.

결괏값은 당연하게도 1이 출력된다.

 

하지만 포인터를 사용하면 얘기가 달라진다.

1-1

1-1 이미지에서 12번 라인을 보면 

aaa 함수를 호출하고 매개 변수로써 a 변수(지역변수)의 주소 값을 주었다.

해당 주소 값을 저장하기 위해 aaa 함수의 매개 변수를 포인터 변수로써 선언하였고 

6번 라인에 *a와 같이 해당 주소 안으로 이동하여 100이라는 값을 넣어주었다.

 

즉 main 함수 안에서만 사용할 수 있던 지역 변수를 main 함수 밖에서 접근하여 값을 

수정해준 것이다. 결괏값은 1-0 이미지 때와 다르게 100이 나온다.

 

다시 한번 정리하면

int number = 1;

int* a = &number; > 주소를 저장하는 바구니를 선언하고 해당 바구니에 number의 주소를 저장한다.

*a = 100; > 저장된 주소 안으로 이동해서 100이라는 값을 넣어준다.

 

최대한 간단하게 정리해보았다.

 


간접 멤버 연산자

 

2-0

 

2-0 이미지에서 보이듯 간접 멤버 연산자는 " -> " 로 표현한다.

해당 연산자는 간접 연산자(*)와 구조체의 특성을 동시에 표현할 수 있다.

 

우선 구조체를 struct 명령을 통해 정의하고 메인 함수 내에 해당 구조체를 사용하기 위해

hello를 선언했다.

 

이후 포인터를 이용해 해당 hello 구조체 변수의 주소를 Hello에 저장하였고

포인터로 주소 내부에 접근해 값을 수정해주었다.

 

마지막으로 간접 멤버 연산자를 이용해 포인터로 값을 수정했을 때보다 간편하게 표현하였다.

20, 21번 라인과 29, 30번 라인은 동일한 동작을 하는 명령이다.

 

2-1 결과값

 

+ Recent posts