전체 글(155)
-
Ch 09. 함수 - 03. 값으로 전달
우선 내용을 보기전에 하나의 경우를 보자. 이 changer 함수는 int 값 2개를 전달 받아 값을 서로 바꿔주는 함수이다. 이를 main함수로 호출해보자값이 바뀌지 않았음을 알 수 있다.왜 값이 바뀌지 않을까? 함수의 전달인자로 값을 전달이전에 scope에 따라서 값에 접근을 할 수 있는지 할 수 없는지에 대해서도 이야기 했었었다.보면 main이라는 함수와 changer라는 함수는 각각의 별개의 scope를 가지고 있는데main이란 함수에서 changer를 호출할때 a와 b를 전달해줬는데 이는 사실 a, b 자체를 직접 전달한게 아니라 a와 b의 값을 전달해주는 것으로 사실상이것과 동일하다고 생각하면 된다. 과정을 조금 상세하게 보자면 먼저 main함수가 실행되면서 지역변수인 두 변수가 스택에 올라..
2025.04.18 -
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