본문 바로가기
Coding&Script/C, C++,C#

포인터

by WeetLies 2019. 3. 19.

55포인터변수

포인터 변수는 지금까지의 자신의 자료형에 맞는 값을 저장받는 변수와 달리, 메모리 주소를 저장하는 변수이다.

즉, 특정한 변수 자체가 존재하는 메모리주소의 값을 가지게 된다.

포인터를 정의할때에는 변수명 앞에 *을 붙여서 선언하게 된다.

또한 변수를 선언할떄에 *을 붙힌 이후에 변수를 *을 붙혀서 호출하게 되면 선언된 포인터변수가 가르키는 변수를 구하게 된다.

포인터 변수를 선언할때 뒤의 값에 &를 붙이는 이유는 변수의 메모리시작주소값을 구한다는 의미이다.

위의 예제에서 a=5;를 선언하고 포인터변수 *b를 통해서 a의 메모리 주소를 저장하게 된다. 이때

화면에 출력할때 b로 호출했을때와 *b로 호출했을때의 차이를 볼수 있다. 

b로 호출했을때에는 *b변수내에 저장된 메모리 주소를 출력 *b로 호출했을때에는 간접참조연산자로 *b포인터가 가르키는 값을 호출하게 된다. b로 호출한 값은 메모리 주소로 프로그램을 실행할떄마다 바뀐다.


포인터의 주의사항/심화

*포인터 자체는 컴퓨터 시스템의 특정한 메모리에 바로 접근할 수 있는 기능이기때문에, 기존에 사용중인 메모리 영역에 접근하거나, 수정하게 되면 

해당 소스코드는 굉장히 위험한 코드이기때문에 조심해야 한다.


*포인터에는 메모리 주소를 담고 있는 변수일뿐이다. 즉, 포인터를 다중으로도 사용할수가 있다.




* 배열과 포인터는 내부적으로 거의 동일하다. 그렇기 떄문에 배열은 선언한 이후에 그이름자체를 포인터 변수처럼 사용 할 수있다. 


*포인터를 지정할때 &변수명은 메모리주소를 저장하지만, 포인터 지정할때 값을 그냥 변수만 지정할 경우 해당 변수의 데이터값이 

포인터에 저장된다.?<<여기 아직도 이해가 덜됨...데헷...