전체 글(155)
-
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 -
Ch07. 포인터 - 01. 포인터의 기본
1. 포인터포인터는 다른 변수나 메모리의 주소를 저장하는 변수로 일반 변수의 경우는 값을 저장하나 포인터는 어디에 값이 있는지(메모리 주소)를 저장한다. C++ 프로그램이 실행되면 변수들이 메모리(RAM)에 저장된다.각 변수는 이 메모리 안에서 고유한 주소를 갖게 되는데int a = 450;이렇게 선언된 변수는 RAM의 어딘가에 저장이 되고 그 어딘가를 특정하기 위한 주소값이 생성된다. 포인터는 이렇게 선언된 변수의 위치를 저장한 주소값을 담을 수 있는 변수인 것이다. 2. 포인터의 선언포인터의 기본적인 선언 방식은타입 * 포인터변수명;과 같이 선언하며 실 사용의 예시를 보자면int * ptr;으로 이 포인터의 경우는 int 타입의 변수 혹은 상수의 주소값을 저장할 수 있는 포인터 변수를 선언한 것이다...
2025.04.08 -
Ch06. 복합데이터 - 09. Range-based for
1. Range-based forC++11에서 도입된 문법으로 배열이나 STL 컨테이너의 원소들을 간결하게 순회할 수 있게 해주는 for문이다. 기존의 for문의 경우는 for (int i = 0; i 이렇게 사이즈를 알아야만 사용할 수 있었던 반면 Range-based for 방식의 경우는for (int value : arr) { std::cout 좀더 간결하고 가독성있게 사용이 가능하다. 기본 문법의 형태는for (변수 : 순회 대상) { // 반복문 본문}로 사용하고 실 사용법은std::arr nums = {1, 2, 3, 4, 5};for (int n : nums) { std::cout 이렇게 사용이 가능하다. 물론 일반 arr의 경우도 해당 방법이 사용이 가능하다.int arr..
2025.04.08