C++ 문법

<포인터> 연산 / const

슬뷔 2022. 4. 9. 17:11
포인터 연산

 

포인터 연산 : 덧셈, 뺄셈을 지원한다.

일반적인 사칙연산은 1을 더할 경우 단순하게 값이 1이 증가하게 되지만,

포인터의 경우는 1을 더하면 단순하게 1이 증가하는 개념이 아닌

해당 포인터 타입(int포인터 이면 int, float포인터 이면 float)의 메모리 크기 만큼이 증가하게 된다.
즉, 2를 더하게 된다면 int포인터일 경우  int의 크기인 4바이트 * 2 만큼 메모리주소의 값이 증가하게 되는 것이다.

 

const 포인터

 

Number는 상수이므로 주소를 붙여주면 const * 가 된다.

pNumber는 일반 포인터 타입이므로, 타입이 달라서 에러가 발생한다.

포인터 타입 왼쪽에 const를 붙여줄 경우, 해당 포인터 변수는 다른 변수의 메모리 주소로 값을 변경하는 것이 가능하다.

단, 해당 주소에 접근하여(역참조) 값을 변경하는 것은 불가능하다.

값을 가져다 사용하는 용도로는 가능하다.

pNumber = &Number1; 다른 주소 참조 가능

*pNumber1 = 500; 역참조 불가능

포인터 타입의 오른쪽에 const를 붙일 경우 const int타입의 메모리 주소는 지정이 불가능하다.

int* const pNumber2 = &Number;

처음에 지정된 주소 이외에 다른 변수의 주소로 변경이 불가능하다.

단, 역참조를 통해 참조하는 대상의 값을 변경하는것이 가능하다.

pNumber2 = &Number2; 다른 주소 참조 불가능

*pNumber2 = 9090; 역참조 가능

위의 2가지 특징이 모두 적용되어 참조하는 대상도 변경이 불가능하고 참조하는 대상의 값도 변경이 불가능하다.

const int* const pNumber3 = &Number1;

 

'C++ 문법' 카테고리의 다른 글

동적할당, 메모리 릭  (0) 2022.04.11
<포인터> void 타입, 이중 포인터  (0) 2022.04.11
<포인터>  (0) 2022.04.08
<배열> Array  (0) 2022.04.08
<반복문> while문, do while 문, 난수  (0) 2022.04.08