C++ LValue RValue 개념파악하기
2023. 6. 6. 21:31
DevLog/C & C++
기본개념 C++11 이전까지 LValue와 RValue는 이름과 마찬가지로 코드에서의 연산 중 왼쪽에 올 수 있는 값과 오른쪽에 존재하는 값으로 구분되어 있었습니다. 이 분류는 현재에서도 통용되는 부분이나 C++11 이후 약간의 좀 더 추가 설명이 필요하게 되었습니다. int main() { // Left Right Result는 모두 LValue로써 식별자(identifier)를 가지고 // 다른 데이터를 복사해서 자신의 상태를 변경 할 수 있다. // 3 7 0은 모두 RValue이다. int left = 3; int right = 7; int result = 0; // RValue는 여러곳에서 볼 수 있는데, RValue는 // 다른 데이터의 메모리를 복사할 공간이 없거나 // 식별자(identif..
스택(Stack)과 힙(Heap) 차이점
2021. 3. 1. 22:15
DevLog/C & C++
메모리 구조 프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드(load)되어야 합니다. 또한, 프로그램에서 사용되는 변수들을 저장할 메모리도 필요합니다. 따라서 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공하고 있습니다. 프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 4가지가 있습니다. 코드(code) 영역 데이터(data) 영역 스택(stack) 영역 힙(heap) 영역 코드 영역 메모리의 코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트 영역이라고도 부릅니다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 됩니다. 데이터 영역 메모리의 데이터(data) 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 ..
포인터(Pointer)와 레퍼런스(Reference)
2021. 3. 1. 19:28
DevLog/C & C++
포인터와 레퍼런스 포인터 레퍼런스 표현 * & 의미 메모리 주소를 가리킨다 값에 직접 접근하는 주소 변수 접근시 나타나는 값 가리키는 주소가 가진 변수의 값 변수의 내용이 저장된 메모리 주소값 상수 참조 X X NULL 초기화 가능 여부 O X 초기화 객체(변수)의 주소값을 입력받음 객체(변수)를 직접 입력받음 초기화 여부 꼭 하지 않아도 됨 반드시 해야함 (나중에 값을 바꿀 수 없기 때문에) 초기화 이후 다른 변수 참조 가능 다른 변수 참조 불가능 특징 메모리 공간을 할당함, 포인터가 가리키는 주소의 크기는 자료형이 무엇이든 간에 항상 같다. 메모리 공간이 할당되는 것이 아님. 이미 선언된 변수를 다른 이름으로 부르는 것 포인터와 레퍼런스가 생긴 계기 입력값을 받는 함수의 변수가 값을 복사한다. 항상 ..
C++ 포인터 개념
2021. 2. 4. 15:43
DevLog/C & C++
주소값의 이해 데이터의 주소값이란 해당 데이터가 저장된 메모리의 시작 주소를 의미합니다. C++에서는 이러한 주소값을 1바이트 크기의 메모리 공간으로 나누어 이해할 수 있습니다. 예를 들어, int형 데이터는 4바이트의 크기를 가지지만, int형 데이터의 주소값은 시작 주소 1바이트만을 가리키게 됩니다. 포인터란? C++에서 포인터(pointer)란 메모리의 주소값을 저장하는 변수이며, 포인터 변수라고도 부릅니다. char형 변수가 문자를 저장하고, int형 변수가 정수를 저장하는 것처럼 포인터는 주소값을 저장하는 데 사용됩니다. int n = 100; // 정수형 변수의 선언 int *ptr = &n; // 정수형 변수의 포인터 선언 다음 그림은 위의 예제에서 사용된 변수와 포인터가 메모리에서 어떻게 ..
C++ 구조체(Struct)
2021. 1. 25. 12:32
DevLog/C & C++
구조체(Struct) 객체를 표현하기 위해 하나 이상의 변수가 필요한 프로그래밍 사례가 많이 있다. 예를 들어, 자신의 표현하기 위해 이름, 생일, 키 , 몸무게 또는 자신에 대한 기타 특성을 저장할 수 있다. std::string myName; int myBirthYear; int myBirthMonth; int myBirthDay; int myHeightInches; int myWeightPounds; 위에는 어떻게든 그룹화하지 않은 6개의 독립 변수가 있다. 자신에 대한 정보를 함수에 전달하려면 각 변수를 개별적으로 전달해야 합니다. 또한, 다른 사람에 대한 정보를 저장하려면 추가된 사람마다 6개의 변수를 추가로 선언해야 합니다. 다행히도 C++에서는 고유한 사용자 정의 집계 데이터 유형(user-..
C++ STL 맵 기본 사용법과 예제
2021. 1. 24. 20:32
DevLog/C & C++
Map 기본 형태 map : 키와 값을 쌍 형태로 선언합니다. 반복자 (iteractor) begin() : 시작 반복자를 반환 end() : end iterator를 반환 추가 및 삭제 insert(make_pair(key, value)) : 맵에 원소를 pair 형태로 추가 erase(key) : 맵에서 key (키값)에 해당하는 원소 삭제 clear() : 맵의 원소 전부 삭제 조회 find(key) : key (키값)에 해당하는 iterator를 반환합니다. count(key) : key (키값)에 해당하는 원소 (value들)의 개수를 반환합니다. 기타 empty() : 맵이 비어 있으면 true 아니면 false를 반환 size() : 맵 원소들의 수를 반환 #include #include #..