pointer (4) 썸네일형 리스트형 [Pointer] 정수형을 문자형으로 정수형 포인터 변수를 초기화할 때 정수형 변수의 주소값을 넣는 이유는, 메모리에서 데이터를 읽는 간격이 자료형의 크기로 결정되기 때문입니다. int 포인터 변수 p는 ++p 연산을 하면 4바이트를 이동하고, short 포인터 변수 s는 ++s 연산을 하면 2바이트를 이동합니다. 컴파일 단계에서, 메모리 크기 단위를 포인터의 타입으로 파악할 수 있습니다. 때문에 포인터의 타입을 다른 타입으로 변환하다고 해서, 역참조하고 있는 내용이 바뀌는 건 아닙니다. 아래 예제를 봅시다. s1에는 260, s2에는 2를 할당했습니다. 구초제 포인터의 타입 캐스팅을 통해 Family1의 객체인 f1의 주소값을 Family2 포인터 변수에 넣었습니다. f1의 short 변수들은 f2의 char 배열에 할당됩니다. 260인 .. 참조(reference) 변수 레퍼런스는 변수에 별칭을 붙이는 것입니다. 어셈블리어를 보면 레퍼런스는 포인터와 같습니다. 포인터를 사용하기 쉽게 해주는 문법이라고 봐도 될 것 같습니다. cppreference의 문서에 따르면, 레퍼런스는 객체가 아니기 배열도 있을 수 없고 포인터도 가질 수 없으며 레퍼런스의 레퍼런스도 가질 수 없습니다. 레퍼런스는 기본적으로 변수로 초기화합니다만, 리터럴로 초기화 하는 것도 가능합니다. 이 경우 const를 반드시 붙여야 합니다. 리터럴은 기본적으로 변경될 수 없는 값이기 때문입니다. #include using namespace std; int main() { // int& num = 1 // error const int& num = 1; const string& str = "Test"; } 다음 코.. [Dangling Pointer] 유효하지 않은 포인터 dangle이라는 단어는 동사로 '달랑거리다' 라는 의미를 가집니다. dangling pointer는 메모리가 delete되거나 할당이 해제되어 아무 것도 가리키고 있지 않은 포인터를 말합니다. dangling pointer는 실체가 없이 껍데기만 달랑달랑거리는 포인터인 셈이지요. #include using namespace std; int main() { int* pNum = new int; delete pNum; pNum; // dangling pointer } 출처> en.wikipedia.org/wiki/Dangling_pointer [Pointer] 달과 손가락 포인터는 주소값을 담는 변수 그 이상 그 이하도 아닙니다. 포인터가 어려운 이유는 주소를 다루는 점 때문에 그렇습니다. 이 모든 건 주소 때문입니다. 개발자가 주소를 직접 다룰 수 있는 언어는, 지금 활발하게 사용되는 언어 중에서는 C/C++가 대표적입니다. typeid를 이용해 타입을 출력해보면 pNum의 공식적인 타입을 확인할 수 있습니다. #include using namespace std; int main() { int num0 = 0; int* pNum = &num0; cout 이전 1 다음