C++/C++ 기초

    [C++] 디버깅(Debugging)

    디버깅(Debugging) 컴퓨터 프로그램 개발 단계 중에 발생하는 시스템의 논리적인 오류나 비정상적 연산을 찾아내고 그 원인을 밝히고 수정하는 작업 과정 디버깅을 왜 해야 하는가? "버그가 없는 프로그램은 없다." 디버그는 개발자가 작성한 코드가 제대로 동작되는 지(주로 논리적인 오류) 검증하는 기초적인 단계이다. 디버깅은 프로그래머가 프로그램 코드를 만드는 과정에서 미처 고려하지 못한 부분이나 실수를 찾는 것이기 때문에 굉장히 어려운 작업이다. 버그의 악영향에 따라 단순한 불편부터 크게는 형사 처벌, 사망 사고에 이르기까지 매우 다양한 문제가 발생하므로, 디버깅 과정은 프로그램을 배포하기 이전에 필수적으로 이루어져야 한다. 디버깅 방법 F10을 누르면 디버깅 모드로 진입할 수 있다. 이후 F10을 누..

    [C++] 함수(Function)

    함수 하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 프로그램 코드의 집합 함수의 생성 함수의 정의 반환 값이 없는 함수(void 형)와 반환 값이 있는 함수(void를 제외한 데이터형)로 나눌 수 있다. 함수의 이름은 되도록 함수의 기능을 나타내도록 설정하는 것이 좋다. 아래와 같이 함수를 구현하는 것을 "함수를 정의한다."라고 한다. // 반환값이 없는 함수 void func(){ /*실행구문*/; } // 반환값이 있는 함수 int func(){ /*실행구문*/; return 0;// return을 이용하여 값을 반환 } 함수 호출 함수를 생성하면, 함수의 이름을 적는 것으로 함수를 호출할 수 있다. 함수를 호출하면, 해당 함수의 기능을 수행하고 다시 원래 있던 코드로 복귀한다. 다음은..

    [C++] 포인터와 배열

    포인터와 배열 포인터는 메모리 주소에 직접 접근하므로 배열 등의 자료구조를 처리하는 데 매우 유용히 사용된다. 배열의 주소 배열은 여러 개의 데이터가 데이터형의 크기만큼 순차적으로 메모리 공간에 할당된다. 배열 원소의 주소값 확인 #include int main() { int arr[5] = { 1, 2, 3, 4, 5 }; for (int i = 0; i < 5; i++) { std::cout

    [C++] 포인터(Pointer) 기초

    포인터(Pointer) 다른 변수, 혹은 그 변수의 메모리 공간주소(시작 주소값)를 가리키는 변수 포인터 선언 포인터를 선언하는 방식은 2가지가 있으며, 아래와 같다. 둘 중 무엇을 쓰더라도 같은 동작을 한다. (포인터에 주소값이 저장되는 데이터의 Type) *(포인터 변수 명); # asterisk(*)가 변수 명 앞 (포인터에 주소값이 저장되는 데이터의 Type)* (포인터 변수 명); # asterisk(*)가 타입 뒤 포인터에 타입이 있는 이유는 컴퓨터에 메모리 공간을 얼마나 할당해야 할지 알려주기 위함이다. int *ptr; int* ptr; & 연산자 데이터의 주소값을 알고 싶을 때 사용하는 연산자 '&변수명' 의 형태로 사용된다. #include int main() { int a = 7; i..

    [C++] 문자열(String)

    문자열 문자열(String)이란 연속된 문자(Character, Char)의 집합을 말한다. 문자열 생성 C에서는 문자열을 생성하기 위해서 char 자료형을 배열로 생성하여 문자를 저장하는 방법을 사용했다. 하지만, C++로 넘어오면서 STL에서 string 클래스를 제공하여, 보다 편리하게 문자열을 다룰 수 있게 되었다. #include 을 통해 string 헤더를 불러와야 한다. 컴파일 단계에서 생성 1. 문자열 생성과 동시에 초기화 2. 문자열 생성한 뒤에, 초기화 #include #include int main() { // 1. 생성과 동시에 초기화 std::string str1("Hello World!!"); // 2. 생성 후, 초기화 std::string str2; str2 = "Hello ..

    [C++] 배열(Array)

    배열 같은 타입의 변수들로 이루어진 유한 집합 배열 선언 배열은 다음과 같이 선언한다. datatype name[/*# of data*/]; 배열을 정의하면서, {} 중괄호를 이용하여 초기화를 동시에 진행할 수 있다. 배열의 인덱스는 0부터 시작하며, "배열명[인덱스]"로 해당 값에 접근할 수 있다. 배열 선언 시 배열 크기를 따로 지정하지 않고, 초기화를 진행하여도 초기화한 원소의 수에 맞게 메모리가 할당된다. 기본적으로 배열 선언시 정적 배열(선언과 동시에 메모리 고정)이 생성되며, 동적으로 메모리를 할당할 수 없다. ▶ 동적으로 배열 크기 할당 시 오류가 발생하며, 동적 배열을 생성하기 위해서는 new 연산자를 이용하여야 한다. C++11 이후 버전부터는 가변길이배열(VLA, Variable-Len..

    [C++] 반복문

    반복문 프로그램 소스 코드 내에서 특정한 부분의 코드가 반복적으로 수행될 수 있도록 하는 구문 while 문 C++에서 사용되는 반복문 중 하나 while 문은 다음과 같이 작성한다. while (/*조건식*/){ /*실행구문*/ } while (1), while (true) 처럼 무한 루프 반복문을 생성할 수 있다. 기본 while 문 #include int main() { int sum = 0; int i = 1; // i가 10이 될 때까지 더하는 반복문 while (i

    [C++] 조건문

    조건문 조건에 따라 실행이 달라지게 할 때 사용되는 문장 if 문 C++에서 사용되는 조건문 중 하나이다. if 문은 다음과 같이 작성한다. if (/*조건식*/) { /*실행구문*/; }else if (/*조건식*/) { /*실행구문*/; }else { /*실행구문*/; } 모든 조건문을 계속 판단하면서 branch가 진행되기 때문에 속도가 switch보다 느리다. 메모리의 사용을 줄이고자 하는 경우에는 if 문이 switch문보다 좋은 성능을 보인다고 한다. 조건의 수가 적을 때는 if 문을 사용하는 것이 유리 #include int main() { int x = 9; if (x >= 10) { std::cout