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