55포인터변수
포인터 변수는 지금까지의 자신의 자료형에 맞는 값을 저장받는 변수와 달리, 메모리 주소를 저장하는 변수이다.
즉, 특정한 변수 자체가 존재하는 메모리주소의 값을 가지게 된다.
포인터를 정의할때에는 변수명 앞에 *을 붙여서 선언하게 된다.
또한 변수를 선언할떄에 *을 붙힌 이후에 변수를 *을 붙혀서 호출하게 되면 선언된 포인터변수가 가르키는 변수를 구하게 된다.
포인터 변수를 선언할때 뒤의 값에 &를 붙이는 이유는 변수의 메모리시작주소값을 구한다는 의미이다.
위의 예제에서 a=5;를 선언하고 포인터변수 *b를 통해서 a의 메모리 주소를 저장하게 된다. 이때
화면에 출력할때 b로 호출했을때와 *b로 호출했을때의 차이를 볼수 있다.
b로 호출했을때에는 *b변수내에 저장된 메모리 주소를 출력
*b로 호출했을때에는 간접참조연산자로 *b포인터가 가르키는 값을 호출하게 된다.
b로 호출한 값은 메모리 주소로 프로그램을 실행할떄마다 바뀐다.
포인터의 주의사항/심화
*포인터 자체는 컴퓨터 시스템의 특정한 메모리에 바로 접근할 수 있는 기능이기때문에, 기존에 사용중인 메모리 영역에 접근하거나, 수정하게 되면
해당 소스코드는 굉장히 위험한 코드이기때문에 조심해야 한다.
*포인터에는 메모리 주소를 담고 있는 변수일뿐이다. 즉, 포인터를 다중으로도 사용할수가 있다.
* 배열과 포인터는 내부적으로 거의 동일하다. 그렇기 떄문에 배열은 선언한 이후에 그이름자체를 포인터 변수처럼 사용 할 수있다.
*포인터를 지정할때 &변수명은 메모리주소를 저장하지만, 포인터 지정할때 값을 그냥 변수만 지정할 경우 해당 변수의 데이터값이
포인터에 저장된다.?<<여기 아직도 이해가 덜됨...데헷...
'Coding&Script > C, C++,C#' 카테고리의 다른 글
| 전역변수/지역변수/정적변수/레지스터변수 (0) | 2019.03.20 |
|---|---|
| 문자/문자열[char형/%c/getchar(),gets(),gets_s(),strlen(),strcmp(),strcpy(),strcat(),strstr()] (0) | 2019.03.20 |
| 배열 (0) | 2019.03.19 |
| 함수/재귀함수 (0) | 2019.03.19 |
| 반복문(for, while) (0) | 2019.03.18 |