전체 글(112)
-
Ch 09. 함수 - 02. 재귀 함수
1. 재귀함수 재귀 함수(recursive function)는 함수의 내부에서 자기 자신을 다시 호출하는 함수를 말한다.void func() { func(); // 자기 자신을 다시 호출}이렇게만 구현하면 무한으로 자기 자신을 호출하기 때문에 반드시 종료조건(base case)을 만들어 줘야만 한다 재귀 함수를 사용하는 보통의 기본적인 구조는반환형 함수이름(매개변수) { if (종료조건) { return 값; } else { return 자기자신을 호출; }}이런 형태로 항상 종료 조건 + 재귀 호출의 두가지 부분으로 구성되게 된다. 2. 재귀함수의 사용 예제재귀 함수는 문제를 더 작은 문제로 나눠서 푸는 방식으로써 알고리즘에서는 중요한 개념이다이 재귀함수를..
2025.04.16 -
Ch 09. 함수 - 01. 함수의 기본
우리는 이전에 여러개의 함수를 사용해봤다.printf, scanf, swap 등등의 여러 함수를 사용했었는데 이번엔 우리가 함수를 만들어서 사용해볼 것이다. 놀랍게 우리는 여태까지 계속 함수를 만들어 사용했었는데 그 함수는 바로 main함수이다.함수의 형태는 기본적으로반환타입 함수명( 매개변수1, 매개변수2, ...){ //함수가 시작되면 실행될 코드들 //반환타입이 있다면 retrun 반환값;}의 형태로 생성할 수 있다. main함수를 이 구성 방식에 따라 확인해보면 반환값이 int형이고 함수의 이름은 main이며 매개변수를 받지 않는 함수라는 것을 알 수 있다.그런데 main의 경우는 return값을 따로 전달하지 않는데 그 이유는 main함수는 예외적으로 암시적으로 0을 리턴해주기..
2025.04.16 -
Ch 08. 참조 - 01. 참조(Reference)
1. 참조 (Reference)C++에서 참조(reference)란 변수에 별명을 붙이는것, 즉 다른이름으로 같은 메모리를 가리키는 방법이다 2. 사용법참조, 레퍼런스를 사용하는 방법은int num = 10;이라는 변수가 존재할때 int& rfnum = num;과 같이 타입과 변수명 사이에 &연산자를 붙여주면 선언이 가능하다. 포인터와는 달리 우항의 변수에는 &를 붙이지 않고 변수명 그대로 사용하고 * 대신 &를 붙여서 선언을 하면 된다.이렇게 코드를 작성해서 출력해보면이렇게 결과를 출력하는 것을 볼 수 있다. 이때 레퍼런스를 사용해서 값을 변경하면이렇게 바라보던 변수 num의 값도 변경되는 것을 볼 수 있다. 1) 레퍼런스는 초기화할때 넣은 변수 외에는 다른 변수를 바라보게 할 수 없다레퍼런스는 초기화..
2025.04.16 -
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