2019년 6월 30일 일요일

[컴퓨터공학]프로그래밍#13(포인터와 참조자)

*포인터
주소를 저장하는 변수
*p : 해당 주소에 있는 값
p : 포인터에 저장되어 있는 주소 값

다음과 같은 데이터 저장 상황에서의 변수 값

i = 10
&i = 0x100
p : 0x100
&p : 0x200
*p : 10
p++ : 104
sizeof(p) : 4
sizeof(*p) : 1

*포인터 관련 연산자
간접 참조 연산자 (*)
포인터에 저장된 주소에 저장된 값을 참조
주소 연산자 (&)
해당 변수의 주소 (Address)
포인터 증감 연산자 (++, --, +, -)
선언된 타입의 크기 만큼 주소가 증가함


*const 포인터
const 객체에 대한 포인터


객체를 가리키는 const 포인터


*void 포인터
데이터형을 명시하기 어려운 경우 사용함
모든 데이터 타입을 다 담을 수 있음
C++ 에서는 묵시적인 포인터 변환 허용되지 않음

*참조자
변수에 별명을 붙이는 것

int &ref = var;
참조자 ref는 변수 var의 별명(alias)임

참조자는 반드시 선언과 동시에 초기화
int &ref; // 오류!
포인터는 변경될 수 있지만 참조자는 변경이 불가능하다.
int &ref = var1; ref = var2; // 오류! 
참조자를 상수로 초기화하면 컴파일 오류
int &ref = 10; // 오류!

*포인터 vs 참조자
가능하면 참조자를 사용하고, 반드시 필요한 경우만 포인터 사용
포인터는 강력한 도구이나, 다양한 문제를 야기할 수 있음
만약 참조하는 대상이 변경되는 경우에는 포인터를 사용
참조자는 대상을 변경할 수 없음
NULL이 될 가능성이 있는 경우에도 포인터를 사용

댓글 없음:

댓글 쓰기