Language/C, C++, C# 7

[C, C++] 동적 메모리 할당 비교

동적 변수를 생성(동적 메모리 할당)할 때, C와 C++의 차이를 비교해 보겠습니다. 먼저, 변수 선언과 해제 방법은 다음과 같습니다. # C int *arr = (int*)malloc(5 * sizeof(int)); free(arr); # C++ int *arr = new int[5]; delete[] arr; 둘의 차이점은 다음과 같습니다. 1. 문법 C: malloc 함수는 사용할 메모리의 크기를 바이트 단위로 지정하고, 할당된 메모리의 포인터를 반환합니다. C++: new 키워드는 할당할 객체의 자료형과 사이즈를 지정하고, 해당 자료형의 포인터를 반환합니다. 2. 자료형 정보 C: 메모리를 단순히 바이트 단위로 할당하므로 자료형 정보가 없습니다. 따라서 사용자는 할당된 메모리에 대한 자료형 변환을..

Language/C, C++, C# 2023.11.24

[C] clock()을 이용한 타자연습기 만들기 (실행시간 측정)

1. clock() 프로그램 실행 후 현재까지 경과된 시간을 ms 단위로 반환 프로그램 실행 시간은 효율성 측정 등 여러 곳에서 사용된다. 이번에는 시간 측정으로 타자 연습기를 구현해봤다. 코드는 아래와 같다. #include #include #include #include #include #define rows 2 #define column 80 int main() { int i, j, k, len, wnum, menu; float t; char str[rows][column] = { "apple is sweet","expensive banana" }; char c[column], name[column]; printf("Input your name : "); gets(name); system("cls"..

Language/C, C++, C# 2020.08.17

[C] Sleep(), system("cls")를 이용한 주사위 굴리기

1. Sleep() 런타임에 프로그램을 일시적으로 대기 상태로 만들기 위한 함수 Sleep(1000); // 1000ms (1초) 동안 프로그램 대기 상태 2. system("cls") 콘솔 화면을 지우는 함수 Linux : clear, Windows : cls 명령어와 같은 기능 위 함수를 이용하여 재밌는 프로그램을 만들어 볼 수 있다. 바로 옛날 메이플 스토리에서 캐릭터 생성 시 필수 관문인 주사위 굴리기를 구현해봤다. 코드는 아래와 같다. #include #include #include #include #include #define SIZE 4 int main() { int i, j, sum, key, value[SIZE]; char p_stat[SIZE][SIZE] = { "STR","DEX","..

Language/C, C++, C# 2020.08.16

[C] 배열과 포인터의 관계

배열 크기가 같은 변수들이 메모리에 순차적으로 할당되어 있는 자료형 로또 프로그램을 만든다고 가정해보자. 우선 7개의 번호를 저장하기 위해 7개의 변수가 필요하다. (num1, num2, ... num7) 만일 7개가 아닌 n개의 값을 저장하려면? n개의 변수를 만들어야 한다. 이렇게 일일이 변수를 만드는 것은 매우 비효율적이다. 여기서 배열의 장점을 알 수 있다. 크기만 정해주면 원하는 만큼의 변수를 쉽게 만들 수 있다. (메모리 크기에 따라 다름) 또한 값들이 메모리에 일련하게 저장되어 배열의 인덱스(offset)로 쉽게 찾아낼 수 있다. 하지만 배열은 정적 할당 변수이기 때문에 크기를 선언시에 지정해야 한다. (이를 극복하기 위해 동적 할당을 이용한 연결 리스트가 있다.) 따라서 지정한 크기보다 데..

Language/C, C++, C# 2020.06.21

[C] 방향키로 printf() 커서 위치 이동 (gotoxy)

MFC(Microsoft Foundation Class Library)를 사용하지 않는다면 C언어를 이용하여 GUI를 구성하는 것은 불가능하다. 바람의 나라 등 2D 게임을 만들 때 캐릭터가 이동하기 위해서는 좌표가 필요한데, CLI 환경에서 2D 게임을 흉내낼 수 있는 gotoxy() 함수에 대해 알아보자. 함수 정의 이름은 gotoxy()가 아니더라도 상관 없음 SetConsoleCursorPosition() : 콘솔 커서 위치 변경 사용법 x, y값에 이동하고자 하는 좌표를 매개변수로 전달 예제를 통해 확인해보자. 소스 코드는 아래와 같다. #include #include #define MAX_X 60 #define MAX_Y 20 void gotoxy(int x, int y) { COORD Pos..

Language/C, C++, C# 2020.06.09

[C] 아스키코드(ASCII)와 유니코드(Unicode)란?

아스키코드 (ASCII) 1960년 미국에서 정의한 알파벳 표준 부호 체계 컴퓨터의 기본 저장 단위인 1byte(=8bit)에서 통신을 위한 1bit(parity bit)를 제외하여 최대 7bit 체계 구성 유니코드 (Unicode) 전 세계의 모든 문자를 일관되게 표현하기 위한 국제 부호 체계 16bit 체계 구성 (아주 희귀한 문자일 경우 최대 21bit까지 사용) 영문 또는 한글을 읽어 크기를 파악해보자. 소스 코드는 아래와 같다. #include int main() { int dec; while (1) { printf("Please enter a value : "); dec = getchar(); if (dec

Language/C, C++, C# 2020.06.09

[C] 프로그램 실행 과정 (빌드 과정)

C언어 프로그램의 실행 과정은 다음과 같다. 컴파일러 (Compiler) 전처리 (Preprocess) 컴파일러가 쉽게 인식할 수 있도록 소스 코드 내부에 "#"으로 시작되는 명령어 재정리 (#define MAX 100이라고 선언했을 경우, 소스에서 MAX라고 쓰여있는 부분을 100으로 치환) hello.c 파일을 입력으로 hello.i 파일 생성 컴파일 (Compile) 전처리된 소스 코드를 어셈블리어로 변환 hello.i 파일을 입력으로 hello.s 파일 생성 어셈블 (Assemble) 어셈블리어를 기계어(binary)로 변환 hello.s 파일을 입력으로 hello.o 파일 생성 링커 (Linker) 목적 파일을 관련된 라이브러리와 연결하여 실행 파일 생성 hello.o 파일을 입력으로 hello..

Language/C, C++, C# 2020.06.08