IT 프로그래밍/C++ 51

[따배시 6.15 ~ 6.16] 참조, 포인터와 참조의 멤버 선택 연산자

#include using namespace std; int main() { int x = 5; int& ref_x = x; return 0; } 이게 참조해주는 간단한 식입니다. 여기서 만약 int& ref_x = 5; 이런 식으로 바꾸면 어떻게 될까요? 그럴 경우 오류가 나게 됩니다. 왜냐하면 5에는 주소가 따로 존재하기 않기 때문입니다. 하지만 const를 앞에 붙이면 가능합니다. const int를 붙이면 임시적으로 컴파일러가 주소를 만들어준다 이런 식으로 생각을 해주시면 됩니다. #include using namespace std; void doSomething(const int& x) { cout

[따배시 6.13] 포인터와 const

int* array1 = new int[length](0); 이렇게 되면 0으로 초기화가 됩니다. int* array1 = new int[length] {11, 22, 33, 44, 55, 66}; 위의 경우 11 22 33 44 55 66 까지 정상적으로 나오고 이후에는 쓰레기값으로 출력되게 됩니다. int value = 5; int* ptr = &value; *ptr = 6; 이럴경우 ptr을 6으로 바꿔지면서 value도 6으로 바뀌게 됩니다. 그런데 만약에 const int value를 하게 되면 포인터를 통해서 value를 읽으려면 point 또한 const를 붙여주셔야 합니다. int main() { const int value = 5; const int* ptr = &value; cout

[따배시 6.11] 메모리 동적할당 new와 delete

int array[1000000]; 정적에 할당하는 메모리는 stack에 들어갑니다. 이 stack에는 메모리가 작습니다. 동적으로 할당하는 메모리는 hip에 들어가며 이 hip에는 메모리가 큽니다. 이렇기 때문에 코딩을 할 때는 정적메모리를 잘 활용하셔야 합니다. 큰 메모리를 만들려면 동적 메모리와 친숙해지셔야 합니다. int *ptr = new int; os로부터 받아온 4byte의 메모리를 그대로 사용할 수 있는 것입니다. int* ptr = new int{ 7 }; cout

[따배시 6.10] C언어 스타일의 문자열 심볼릭 상수, 포인터 사용의 유의점

char* name = "Jack Jack"; 위 같은 경우는 불가능합니다. 왜냐하면 Jack Jack은 임시로 만들어진 literal일 뿐인데 여기에다 포인터를 집어넣을 수는 없는 것입니다. 포인터는 메모리의 주소를 가리킬 수 있는 것이기 때문에 Jack Jack이 담길 곳이 없기 때문에 그런 것입니다. 하지만 여기에다 const를 붙여주면 가능합니다. const char* name = "Jack Jack"; 이는 특별히 name을 const로 고정해두면서 가능하게 해주는 것입니다. const char* name = "Jack Jack"; const char* name2 = "Jack Jack"; cout