Programming Language/C++(41)
-
Ch 07. 포인터 - 07. std::vector
1. std::vectorstd::vector를 보기 이전에 std::array의 경우는 정적배열을 사용한 C++스타일의 배열로 컴파일 시점에 크기가 정해져있어야하는 형태의 타입이였다.그리고 정적배열을 활용했기에 메모리의 stack 부분에 주로 할당이 되게 된다.#include #include int main() { std::array array = { 1, 2, 3 };} 이렇게 사이즈가 컴파일 시점에 지정되어 있어야 하기에 이런 사용이 불가능하다. 반면 이번에 배울 std::vector의 경우는 정적할당이 아니라 동적할당을 사용하기에 컴파일 시점에 크기가 지정되어 있지않아도 된다. 먼저 vector의 간단한 사용법부터 확인해보자. 2. std::vector의 사용법std::array의 경우는 arra..
2025.04.15 -
Ch 07. 포인터 - 06. void pointer
1. void poitnervoid pointer는 어떤 타입의 데이터든 가리킬 수 있는 범용 포인터로 int*, double*, char*처럼 특정 타입을 가리키는 포인터가 아니라 타입이 없는 포인터로 어떤 메모리든 가리킬 수 있다.void* ptr;int a = 10;ptr = &a; // int형 변수의 주소를 void 포인터로 저장 2. 왜 void pointer 가 필요할까void 포인터가 필요한 이유는 여러가지가 있는데 간단하게 몇가지 말해보자면다양한 타입을 하나의 인터페이스로 받기 위해(어떤 타입이 올지 모르는 경우 void 포인터로 받아 놓고 나중에 처리할 수 있게 된다)C라이브러리와의 호환성을 위해(C API는 타입 정보가 없어서 주로 void*를 사용한다)더보기C언어의 경우는 템플릿이..
2025.04.15 -
Ch 07. 포인터 - 05. nullptr
1. null 포인터null 포인터는 어떤 것도 가리키지 않는 포인터를 말한다포인터는 원래 어떤 메모리 주소를 저장하는 변수인데 null 포인터는 의미 있는 주소가 없다는 걸 표현하기 위해 특별히 설정된 값이다.즉 아직 유효한 대상을 할당받지 않은 상태 또는 더 이상 유효하지 않은 상태를 나타낸다. 2. null 포인터는 왜 필요할까기존에 포인터의 경우는 값을 초기화 해주지 않으면 이렇게 초기화 되지 않은 포인터를 사용하고 있다고 에러를 띄운다. 그런데 때로는 포인터가 아직 어떤 것도 가리키지 않거나, 가리킬 수 없는 상태가 필요하다. 1) 어떤걸 가리킬지 대상을 모를때Student* p = nullptr; // 아직 대상이 없음// 나중에 조건에 따라 할당if (조건) { p = new Stu..
2025.04.15 -
Ch07. 포인터 - 04.동적 할당
1. 할당C++에서 할당(allocation)이란 메모리를 확보해서 어떤 변수나 객체가 사용할 수 있도록 해주는 것을 의미한다즉 이 말은 프로그램이 실행되는 동안 사용할 수 있는 메모리 공간을 만드는 행위를 말하는 것이다. 이 할당의 종류는 자동할당, 정적할당, 동적할당이 존재하는데 간단하게 각각 자동으로 할당을 해주고, 정적으로 할당을 해주고, 동적으로 할당을 해준다는 의미이다. 1) 자동할당(Automatic Allocation)자동할당은 함수 내 지역변수에서만 적용되는 메모리 할당 방식으로 함수가 호출되면 생성되고 함수가 종료되면 자동으로 소멸되는 할당 방식이다.자동할당을 할때에는 메모리의 stack영역에 공간을 할당하게 된다. 자동할당은 변수를 선언할때 자동으로 메모리를 할당하는 방식으로 함수나 ..
2025.04.10 -
Ch07. 포인터 - 03.문자열과의 관계
1. 문자열의 이름과 포인터이전에 배웠던 배열의 경우는 배열의 이름은 배열의 첫번째 요소의 주소값을 반환했었는데 문자열 또한 마찬가지이다.이렇게 사용이 가능하다. 조금 다른 점은 배열의 경우는 std::cout에 넣었을 경우 주소값을 반환했으나 문자열의 경우는 값을 반환한다는 점이다. 이는 std::cout 2. 문자열 리터럴과 포인터이전에 정수 리터럴은 포인터에 직접 넣을 수 없었으나 문자열 리터럴의 경우는 직접 포인터에 넣는 것이 가능하다.물론 그렇게 넣기 위해서는 해당 값이 변경되지 않도록(상수이기 때문에) const를 넣어 sptr을 사용해서 값을 변경할 수 없도록 해줘야 사용이 가능하긴하다. 이게 가능한 이유는 정수 리터럴과 문자열 리터럴의 처리 방식에서 있다. 정수 리터럴의 경우는 int n..
2025.04.09 -
Ch07. 포인터 - 02. 배열과의 관계
포인터와 배열의 관계에 대해서 알아두기에 앞서 먼저 알아둬야할 부분에 대해서 나열해보도록 하자. 0. 배열과 포인터의 관계를 알기 이전에 알아둬야 할점1) 배열의 이름은 배열의 첫 번째 요소의 주소이렇게 arr을 출력했을때의 값과 &을 붙여 arr의 0번째 요소의 주소값을 확인해보면같은 주소를 출력하는 것을 알 수 있는데 이는 배열의 이름(배열의 변수명)만을 사용할때는 배열의 가장 첫요소의 주소값, 배열의 시작지점의 주소값을 전달한다는 것이다 2) 배열과 포인터는 매우 밀접한 관계를 가지며 서로 거의 동일하게 작동하는 경우가 많음뒤에서 배울 내용이지만 포인터와 배열은 아주 비슷하게 작동한다.먼저 포인터에는 배열의 이름을 전달하면서 주소값을 할당하는 것이 가능한데 arr, 배열의 이름을 사용하는 경우 그것..
2025.04.09