프로그래밍 언어/C 21

열거형(Enum, Enumeration)

#include#define IDLE 10 //치환이 되기에 디버깅시 표시가 안됨enum EAnimation //디버깅시 표시가 됨{ kIdle=10, kWalk, kRun, //애플에서 소문자 const와 비슷한 k를 붙여서 사용함 //처음에 쓰여진 것 순서대로 1씩증가 JUMP=20, FALL, //대입되면 대입 된 것 부터 1씩 증가 Attack, Die};void main(){ // 열거체, 열거형(Enumeration) : 상수를 만드는 것을 도와주는 개념 printf("kIdle: %d\n", kIdle); printf("kWalk: %d\n", kWalk); printf("kRun: %d\n", kRun); printf("JUMP: %d\n", JUMP); printf("FALL: %d..

구조체(Structure)

구조체란 복합 자료형 혹은 사용자 정의 자료형 이라고들 말한다 우리가 기존에 사용하던 int, double, char등은 기본 자료형(Primitive Type) 이라고 한다.  구조체 선언(Structure Declaration) struct 이름 { 내용 }struct SCharacter{ int lv; int hp; int mp; int exp;} 사용 예시#includestruct SCharacter{ int lv; int hp; int mp; int exp;}void main(){ struct SCharacter player = {1, 50, 10, 5}; // . : 맴버 접근 지정자 player.hp = 100; player.lv = 5; printf("pla..

다차원 배열(Multi-Dimensional Array)

2차원 배열 선언시 : 자료형 변수명 [row][column][]가 하나씩 붙을때마다 1차원씩 늘어나는 형태 ( ex)) 자료형 변수명[x][y][z]시 3차원 배열)  //자료형 변수명[raw][column]int arr[2][3] = { { 11,12,13 }, { 21,22,23 } };2차원 배열 (정적)선언시 column에 해당하는 변수는 입력을 해야 선언이 가능하다(raw에 해당하는 부분은 생략 가능)해당 2차원 배열은 메모리 구조상 저렇게 있는 것이 아닌이런 형태로 메모리를 할당 받는다.다차원 배열은 그저 사람이 이해하기 쉽게 만들어 놓은 것일 뿐이다. 2차원 배열 초기화시 왜 row는 없어도 되는데 column은 있어야 할까? int arr[][3] = {11,12,13,21..

정적/동적 메모리 할당(Memory Allocate)

우리가 변수를 선언하면컴퓨터는 메모리를 할당해주고 변수를 통해 그 메모리에 접근 할 수 있게 해줍니다. 컴퓨터 메모리는ROM(Read Only Memory) / REM(Random Access Memory)으로 나뉘어지는데 ROM은 우리가 흔히 말하는 하드디스크이고REM은 흔히 말하는 REM(렘)입니다 ROM은 저장공간 이라고 생각하면 편하고REM은 어떤 주소를 찾아가도 속도가 같기에 프로그램을 불러들여서 사용과 반환을 하는 장치라고 보면 됩니다. REM의 구조는다음과 같은 구조를 가집니다DATA 영역은 전역변수가 저장되고STACK 영역은 지역변수가 저장되며그리고 HEAP 영역은 우리 사용자(개발자)가 직접 관리를 할 수 있는 메모리 공간 입니다.   메모리 할당에는정적, 동적 두가지 종류가 있는데 전역..

문자열 함수 활용 feat)예외처리

char cStr[] = { 'H', 'e', 'l', 'l', 'o', ',' , ' ', 'W', 'o', 'r', 'l', 'd', '!','\0'};char* str = "Hello, World!";int cnt = 0;while (cStr[cnt] != '\0'){ printf("cStr[%d]: %c\n", cnt, cStr[cnt]); ++cnt;}printf("cStr Length: %d\n", cnt);문자열의 크기를 구하는 법에는 sizeof와 배열의 첫 요소를 나누는 형식도 있지만다음과 같이 문자배열 0에서 부터 반복문을 돌려 나오는 cnt 값으로 문자열의 크기를 구하는 방법도 있다. 그런데.. 문자열의 크기를 구하는 법을 예시로 들어서 그렇지만굉장히 자주 쓰이는 요소들은 ..

문자열(String)

기존에 문자는char형을 이용해서 문자를 출력했다char c = 'c';printf("c: %c \n", c); 문자열을 출력하려면 하나의 문자만을 출력하는 char형 배열을 선언해서 출력을 했는데char cStr[] = { 'H', 'e', 'l', 'l', 'o', ',' , ' ', 'W', 'o', 'r', 'l', 'd', '!'};int sStrLen = sizeof(cStr) / sizeof(cStr[0]);// sizeof(cStr) / sizeof(cStr[0]); 배열의 길이를 구하는 식, // char형은 1byte의 크기라서 이렇게 나눠줄 필요가 없이 sizeof(cStr) 만으로 충분하다printf("for문으로 c배열을 출력 : ");for (int i = 0; i  ..

함수(Function)

함수(Function)는반환형 함수명(매개변수);의 구조를 가진다 함수선언(Function Declration) void PrintHelloWorld();함수명은 잘 지어야한다. 보자마자 무엇을 하는 것인지 알 수 있도록 해야 하기 때문에 축약어를 잘 쓰지 않는다.그렇기 때문에 해당 함수에는 함수명이 가지는 기능이 아닌 다른 기능을 넣지 않도록 주의하자. 함수정의(Function Definition)void PrintHelloWorld() { printf("Hello, World!\n");}함수가 사용되는 기능을 구현하는 것 이라고 생각하면 된다. int Sum(int _lhs, int _rhs); //함수선언시 매개변수 명 생략 가능int Sub(int, int); int Mul(int _lhs, in..

포인터(Pointer)

포인터란 간단히 말해 메모리 주소를 저장하는 공간 이다.int var = 10;// * : 포인터// & : 변수의 주소int* pVar = &var; // int* : 정수형 포인터 선언, 정수형 포인터 변수 pVar에 var의 주소를 담는다 #includevoid main(){ int var = 10; int* pVar = &var; printf("var: %d\n", var); printf("*(&var): %d\n", *(&var) ); printf("&var: %p\n", &var ); *pVar = 100; printf("pVar: %p\n", pVar); printf("*pVar: %d\n", *pVar); printf("var: %d\n", var);}*을 변수 뒤에 붙인다는 것은 ..

배열(Array)

배열(Array) 이란? 같은 형태의 데이터를 연속적으로 저장하고 활용하려는 경우에 사용하는 것 입니다. 100개의 데이터가 있다면 100개의 변수를 지정하고 사용해야합니다하지만 저 100개의 데이터가 같은 종류라면 크기(길이)가 100인 배열을 하나만 선언한다면 100개의 데이터를 쉽게 다룰 수 있습니다. 정수형 변수 i는 4byte를 사용합니다길이가 4인 정수형 배열 arr[4]는 16byte의 크기를 활용 할 수 있습니다.// 배열(Array)// arr: 배열의 이름// [5]: 배열의 길이int arr[5] = { 1 , 2 , 3 , 4 , 5};배열의 선언은 다음과 같이자료형 변수명[길이] = {초기값}; 으로 이루어 집니다 배열에는 몇가지 특징이 있는데배열의 초기화시 배열의 길이를 넘어가는..