C++기초

C++기초

220325(3)_문자열(String)

#include int main() { //문자열 = 문자의 배열 //이걸 활용해서 메모리 복사라는 매우 유용한 기능을 쓸 수 있다. //char: 1바이트를 차지하는 문자 //wchar_t: 2바이트를 차지하는 문자(유니코드) //한글은 1글자당 2바이트를 차지하므로 char에 저장할때는 //2개의 공간이 필요하다. //문자열의 끝은 0(널문자) 로 표현이 되어야 한다. //지금 당장은 char에 집중할 것임(많이 쓸 것이므로) charText[64] = {}; //문자열도 마찬가지로 0으로 먼저 초기화를 해놓고 사용하는 것이 좋다. charText1[64] = "문자열입니다."; //이 문장을 저장하기 위해선 한글(2) * 6 + .(1) * 1 + 널문자(문장의 끝, 1) 해서 //13바이트가 필요..

C++기초

220325(2)_Define

#include //#define은 전처리기이다. //#define 이름 코드 //코드에서 원하는 부분에 #define의 이름을 넣어주면 //이름 뒤에 있는 코드를 *컴파일 전*에 그곳에 붙여넣어주고 //해당 코드로 컴파일을 진행해 준다. //대신 #define은 한줄로 작성해야 된다. #define COUNT30 //이걸 보고 상수라고 생각할 수 있지만, //정확히는 상수가 아니다. #define OUTPUTTEXT std::cout

C++기초

220325(1)_함수(4)_함수의 재귀(Recursion)

#include /* 재귀함수 : 함수 안에서 자기 자신을 호출하는 함수를 말한다. 재귀함수를 사용할때는 반드시 종료부분을 만들어 주어야 한다. 재귀함수를 종료한다는 것은 더이상 자기자신을 호출하는 것을 막아누즌 것이다. ex)자기 자신을 3번 호출하는 재귀함수 Output시작스택생성 Output시작스택생성 Output시작스택생성 Output끝스택정리 Output끝스택정리 Output끝스택정리 이게 무한으로 반복되면 Output이 끝나서 스택이 정리가 되지 않는다. 그럼 메모리 안의 스택 공간에 계속 생성된 함수의 스택만 쌓이므로 결국 꽉 차게 되고, 오류가 발생하게 된다. 이것을 스택 오버플로우라고 한다. */ /* ↓ void Output() { Output(); } */ //cf)모든 반복문은 재귀..

C++기초

221324(3)_함수(3)_함수 포인터

#include //함수 포인터 확인을 위한 함수들 선언 void Test() { int Number = 100; std::cout

C++기초

220324(2)_데이터 타입, 지역 변수와 정적 변수

#include int g_Number = 100; //전역 변수 테스트 int Add(int Number1, int Number2) { return Number1 + Number2 + g_Number; } int Add(int Num1, int Num2, int Num3) { return Num1 + Num2 + Num3 + g_Number; } int Add1(int Number1, int Number2 = 20) { return Number1 + Number2; } float Add(float Number1, float Number2) { return Number1 + Number2; } /* //C++의 메모리 영역: 스택, 데이터, 힙, 코드의 4가지. * 스택 영역: 함수의 인자 혹은 함수의 ..

C++기초

220324(1)_함수(2)_함수의 오버로딩, 디폴트 인자

#include int Add(int Number1, int Number2) { return Number1 + Number2; } //위 함수에는 정수만 넣을 수 있다. //만약에 소수점을 넣으면 소수점이 잘리게 될 것이다. //만약에 우리가 float 타입을 연산하면 float 타입을 반환하고 싶으면 //새로 함수를 만들어야 된다. /* 함수의 오버로딩: 같은 이름으로 함수를 만들어줄 때 인자의 개수 혹은 타입이 서로 다를 경우 같은 이름으로 함수를 정의하는 것이 가능하다. 이를 함수의 오버로딩이라 한다. cf)네임 맹글링 반환타입은 함수의 오버로딩에 영향을 줄 수 없다. 무조건 인자의 갯수 혹은 타입으로만 함수 오버로딩을 할 수 있다. */ float Add(float Number1, float Nu..

C++기초

220323(6)_함수를 활용한 숫자야구

//220317의 NumberBaseball 숫자야구 코드를 함수로 나누어서 리팩토링한 것 #include #include void SetNumber(int* Array) { for (int i = 0; i < 9; ++i) { Array[i] = i + 1; } for (int i = 0; i < 100; ++i) { intIdx1 = rand() % 9; intIdx2 = rand() % 9; intTemp = Array[Idx1]; Array[Idx1] = Array[Idx2]; Array[Idx2] = Temp; } } void Check(int* Number, int* Input, int& Strike, int& Ball) { for (int i = 0; i < 3; ++i) { for (int..

C++기초

220323(4) - 함수(1)

#include /* 함수: 원하는 코드를 모아서 구현을 해놓은 뒤에 원할때마다 해당 코드를 동작시켜줄 수 있게 해주는 기능을 함수라고 한다. 함수의 형태 반환타입 함수이름(인자) { 동작시킬 코드 } 반환타입: 이 함수를 동작시키고 이 함수에서 원하는 결과가 있을 경우 그 결과를 얻어오고자 할 때 해당 결과의 변수 타입을 지정하면 된다. void를 반환타입으로 사용한다면 결과를 반환하는 것이 없다. 라는 의미로 사용하게 된다. int를 반환타입으로 사용한다면 이 함수를 실행하고 결과로 정수를 얻어오고자 할 때 int를 반환타입으로 사용하는 것이다. return 키워드를 이용해서 함수의 결과를 반환한다. 함수이름 : 원하는대로 이름을 만들어 줄 수 있다. 단, 이 함수가 수행하는 기능에 맞는 이름을 잘 ..

C++기초

220323(3) - 참조(Reference)

#include int main() { /* 레퍼런스 : 다른 변수를 참조하여 값을 컨트롤 할 수 있다. 포인터와 비슷한 기능을 하지만 포인터는 C언어에서도 지원하는 반면 레퍼런스는 C++ 버전의 포인터이다.(좀 더 사용하기 쉬운 포인터) 처음 한번 참조하는 대상이 지정되면 다른 대상을 참조할 수 없다. 장점: 역참조를 할 필요가 없다.(바로 접근이 가능하다) int&

C++기초

220323(2) - 구조체(Structure)

#include //구조체도 우리만의 변수 타입을 만들어내는 문법 중 하나이다. //enum과 비슷함. /* 구조체 : 서로 다른 타입의 변수 여러개를 한번에 묶어서 하나의 사용자정의 변수 타입으로 만들어줄 수 있는 기능이다. 서로 다른 변수 여러개를 여러개 모아서 사용할 수가 있기 때문에 엄청 많이 쓰임 struct라는 키워드를 이용해 만들 수 있다. struct 구조체이름 { 원하는 변수 선언 }; */ struct MonsterInfo { charName[32]; intAttack; intArmor; intHP; intMP; }; struct Test { char A; int Number; }; struct Test2 { char A; char B; int Number; }; struct Test3..

C++기초

220323(1) - 지난번에 만들었던 야구게임 함수로 정리하기.

//원본 야구게임 코드. #include #include int main() { srand((unsigned int)time(0)); int Random = rand(); intNumber[9] = {}; for (int i = 0; i < 9; ++i) { Number[i] = i + 1; } for (int i = 0; i < 100; ++i) { intIdx1 = rand() % 9; intIdx2 = rand() % 9; intTemp = Number[Idx1]; Number[Idx1] = Number[Idx2]; Number[Idx2] = Temp; } while (true) { std::cout

C++기초

220322 - 동적 할당(Dynamic Allocation)

#include #include //crt debug라는 헤더. 메모리 릭이 발생했는지 확인해주는 헤더 int main() { //아래 코드를 이용해서 메모리 릭을 체크할 수 있다. /*단, Ctrl + F5를 이용해서 실행을 하면 릭이 체크가 안된다. 릭을 체크하고자 한다면 F5(디버그 모드 실행)을 이용해서 실행하면 릭이 있을 경우 출력창에 릭을 알려준다.*/ _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); /* 동적할당 : 메모리를 시작할 때 만들어주는 것이 아닌 필요한 순간에 공간을 만들어주는 기능이다. 메모리를 내가 원할때 쓰고 제거하는 것이 가능. 효율적으로 쓸 수 있다. new와 delete 키워드를 이용해서 동적으로 메모리를 할..

hyrule
'C++기초' 카테고리의 글 목록 (3 Page)