C/기초 20

동적 메모리 활용

동적 메모리 할당 기술은 C언어에서 고급 프로그램 개발이 이루어질 때 빠질 수 없는 부분이다. 동적 메모리에 대한 활용이 익숙해지만 메모리에 대한 이해도가 높아지고 메모리를 적절하게 사용하는 방법을 알게 된다. 따라서 동적 메모리에 대한 개념을 바르게 이해하고 이를 활용할 수 있도록 반복적으로 이를 활용해 볼 필요가 있다. #include #include //구조체의 동적 메모리 할당 struct Book { int number; char title[100]; }; void showBook(struct Book* p, int n) { int i; for (i = 0; i number, (p + i)->title); } } ..

C/기초 2019.08.02

동적 메모리

동적 메모리 할당이란 프로그램이 실행 도중에 동적으로 메모리를 할당 받는 것을 말한다. 프로그램에서는 필요한 만큼의 메모리를 시스템으로부터 할당을 받아서 사용하고, 사용이 끝나면 시스템에 메모리를 반납한다. 필요한 만큼만 할당을 받고 또 필요한 때에 사용하고 반납 메모리를 효율적으로 사용할 수 있는 것이다. 동적 메모리는 malloc()계열의 라이브러리 함수를 사용하여 할당 받아 사용할 수 있다. 동적메모리는 마치 수납 공간에서 물건을 꺼내는 것과 비슷하다. 물건의 사용이 끝나면 다시 수납 공간에 물건을 놓아햐한다. 만약 물건을 제대로 반납하지 않으면 다른 사람이 해당 물건을 사용할 수 없기 때문이다. 메모리 또한 마찬가지다. 동적 메모리의 사용이 끝나면 반드시 해당 메모리 영역을 명시적으로 반납해주어야..

C/기초 2019.08.01

파일 입출력

파일입출력은 다양한 프로그램을 개발할때 자주 사용되는 기능이다. 예를들면 파일입출력을 통하여 게임에서 현재의 데이터를 저장하고 다시 불러오거나 할 수 있다. 뿐만 아니라 프로그램 전반에 사용되는 다양한 데이터를 처리하고 저아하여 보관할 수 있다는 점에서 유용하다. 또한 보완같은곳에서도 많이 사용이된다. C언어같이 강력한 입출력 체계를 가지고있는 언어는 현재 컴퓨터에 설치되어있는 파일을 지워라 복사해라 하는 명령이 가능하기 때문에 프로그램을 잘못짜거나 악의적으로 컴퓨터 내의 프로그램을 건드릴수 있다. 매우 위험하기도하기 떄문에 양날의 검이라고 하기도한다. #ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif #include int main(void) { FILE..

C/기초 2019.08.01

구조체 활용

#include #include struct point { int x; int y; }; void comparePoint(struct point p1, struct point p2) { if (p1.x == p2.x && p1.y == p2.y) { printf("p1과 p2와 같습니다."); } } // 이렇게 함수를 사용하는것이 더 체계적이다. // 왜냐하면 point라는 구조체 하나만 비교를 할 수있는 함수이기 때문이다. int main(void) { struct point p1, p2; p1.x = 30; p1.y = 10; p2.x = 30; p2.y = 10; /* if(p1 == p2){ printf("p1과 p2는 같습니다"); } 라는 표현이 안된다. p1과 p2자체는 비교가 안되기 때문..

C/기초 2019.07.30

구조체

C언어는 기본적으로 Java나 C++과 같은 다양한 프로그래밍 언어에 비해서 개발이 까다로운 편이다. 무엇보다 객체 지향에서의 모듈들을 C에서 바르게 적용하기 어렵다는 점에 있다. 다만 C가 익숙하다면 다른 객체 지향 프로그래밍 언어로 작성한 프로그램을 그대로 C에서도 개발할 수 있을 만큼 개발자의 능력에 따라 구현된 프로그램의 기능이 전차만별일 수 있다. 신기하게도 C언어에는 객체 지향 프로그래밍에서 클래스(class)와 흡사한 개념으로 사용되는 구조체(Structure)가 있다. 구조체란 : 객체 지향 프로그래밍에서 말하는 클래스의 모체가 되는 것으로 여러 개의 자료형을 묶어서 새로운 자료형을 만들 수 있는 방법이다. 구조체는 여러 개의 데이터를 하나로 묶어서 사용할 수 있도록 하기 위해 만들어진 C..

C/기초 2019.07.30

문자열

char array[10]; 영어는 : 1개 크기(1byte) 한글은 : 2개 크기(2byte) 를 차지하게 된다. //하나의 문자열 안의 글자수 세기 int main(void) { char input[1001]; gets(input); int count = 0; while (input[count] != '\0') { count++; } printf("입력한 문자열의 길이는 %d 입니다.", count); printf("입력한 문자열은 : %s", input); return 0; } 문자열의 크기를 나타내는 방법을 구현해 봤다. 또한 입력된 문자열을 그대로 출력하는것을 해 보았다. #include #include //string length = strlen(); int main(void) { char i..

C/기초 2019.07.30

포인터

C언어의 가장 큰 특징이자 장점이라고 할 수 있는 부분이다. 특정 데이터가 저장된 메모리의 주소를 저장하는 변수라고 할 수 있다. 다른 곳의 주소 그 자체를 가리키기 떄문에 이를 응용하여 다양한 연산을 수행 할 수 있다. 뿐만 아니라 프로그램의 어떠한 위치에서 시행되더라도 특정한 주소를 그대로 이용하기 떄문에 값이 즉시 변경된다는 특징을 가지고 있다. 다른변수가 위치한 그 공간을 바로 접근함으로써 값을 바꾸거나, 바로 처리 할 수 있다. 포인터를 사용할떄는 꼭 *를 사용해야한다. 또한 메인메소드에서 매개변수를 넣어줄때도 &을 사용해야한다.(주소를 가리킬때는 &을 사용하기 떄문이다.) 실제로 swipe함수는 많이 사용되며 잘 이해해야한다. 다양한 운영프로그램을 사용하기도 하면서 해킹할떄도 이용하기도 한다...

C/기초 2019.07.26

배열이란

배열은 쉽게 말해 데이터가 많을 때 사용하는 것이다. 가장 간단한 프로그램 예제에서는 단순히 한 두개의 변수만으로 프로그램을 작동시킬 수 있었지만 현실에서의 다양한 프로그램에는 아주 많은 양의 데이터가 사용되는 것이 일반적이다. 따라서 데이터가 많을 때 주로 배열을 이용할 수 있다. 이때 배열은 한없이 많을 수 있으면서도 그 데이터 개수가 변경될 수 있는 데이터들의 집합을 지정해줄 수 있기에 효괒거으로 대부분의 프로그램에 사용된다. #ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif #define NUMBER 5 //배열을 만들때 이렇게 이용한다. #include // 5개의 정수중에서 최댓값과 최솟값의 위치를 출력하는 프로그램 int main(void) {..

C/기초 2019.07.25