목록CS 지식/C언어_basic (22)
Taking baby-developer steps
전처리기 전처리기는 프로그램을 이식성 높게 생산성 높게 안정적으로 개발하기 위해서 많이 사용한다. 전처리기 구문은 다른 프로그램 영역과 독립적으로 처리된다. 전처리기 구문은 소스코드 파일 단위로 효력이 존재한다. 소스코드를 빌드해서 실행파일이 만들어질 때 까지의 과정에서, 소스코드를 전처리기가 향상된 소스코드로 만드는데, 이 전처리 과정에서 사용되는 특별한 문법들에 대해서 학습한다. 파일 포함 전처리기 #include는 전처리기에서 가장 많이 사용되는 문법이다. 특정한 파일을 라이브러리로서 포함시키기 위해 사용한다. #include 구문으로 가져 올 수 있는 파일에는 제약이 없다. #include "파일 이름" #include #include 이 구문 자체가 가져오는 파일의 소스코드로 완전히 대체된다는 ..
파일 입출력 소프트웨어에서 파일 입출력이 필요한 이유에 대해 이해하고, C언어를 이용해 파일 입출력 하는 방법을 학습한다. 파일 입출력의 필요성 프로그램이 꺼진 이후에도 데이터를 저장하기 위해서는 파일 입출력이 필요하다.ex> 게임을 껐다 킬 때마다 다시 처음부터 캐릭터를 키워야 한다면 고객이 이용하지 않을 것. 파일이 실질적으로 저장되는 위치 파일이 실질적으로 저장되는 위치는 SSD와 같은 보조기억장치라고 할 수 있다. Ram이나 CPU는 일반적으로, 특정한 데이터를 영구적으로 가지고 있지는 않는다.(이를 휘발성 있게 저장 된다고 말한다.) 보조 기억장치에 저장된 파일을 실행하면, 해당 프로그램이 프로세스로 변환되며 Ram에 들어가서 구동된다. 그 후 CPU가 Ram에서 구동된 코드를 하나하나 읽어서 ..
구조체 구조체를 활용해 자료형을 만드는 방법을 공부하고, 구조체를 활용한 다양한 예제를 다룬다. 여러개의 변수를 묶어 하나의 객체를 표현하고자 할 때 구조체를 사용할 수 있다. 캐릭터, 몬스터, 학생, 좌표 등 다양한 객체를 모두 프로그래밍 언어를 이용해 표현할 수 있다. 구조체의 정의와 선언 struct 구조체명 { 자료형1 변수명1; 자료형2 변수명2; ... }; 위와 같은 방법으로 구조체를 정의 및 선언한다. 프로그램에서 요구하는 특성에 맞게 하나의 객체를 정의 할수 있다. ex) 한 명의 학생에 대한 정보를 담고 있는 구조체 struct Student{ char studentId[10]; //학번, 최대 9자리까지인 문자열 char name[10]; //이름, 최대 9자리인 문자열 int gra..
함수 포인터 C언어에서는 함수의 이름을 이용해 특정한 함수를 호출한다. 함수의 이름은 메모리 주소를 반환한다. 이는 배열의 이름이 메모리 주소 값을 반환(첫 번째 원소의 주소값과 같음)하는 것과 같은 맥락이다. ex)함수의 이름이 메모리 주소를 반환하는 것을 확인 #include void function(){ printf("Thsi is my function"); } int main(void){ printf("%d\n", function); function(); system('pause'); return 0; } 1136043621 Thsi is my function 함수 포인터는 특정한 함수의 반환 자료형을 지정하는 방식으로 선언 할 수 있다. 함수 포인터를 이용하면 형태가 같은 서로 다른 기능의 함수..
동적 메모리 할당 동적 메모리 할당의 원리를 학습하고, 동적 메모리 할당을 이용해 프로그램 실행 도중에 메모리가 할당 되도록 한다. 동적메모리 할당의 개념 일반적으로 C언어에서 배열의 경우, 사전에 적절한 크기만큼 할당해야 한다. 원하는 만큼만 메모리를 할당해서 사용하고자 하면, 동적 메모리 할당을 사용해야 한다. '동적'이라는 말의 의미는 '프로그램 실행 도중에'라는 의미이다. 동적 메모리 할당 함수 C언어에서는 malloc()함수를 이용해, 원하는 만큼의 메모리 공간을 확보할 수 있다. malloc()함수는 메모리 할당에 성공하면 주소를 반환하고, 그렇지 않으면 NULL을 반환한다. malloc()함수는 라이브러리에 정의되어 있다. malloc(할당할 바이트 크기); malloc()함수가 램(메인 메..
다차원 배열과 포인터 배열 다양한 차원의 배열을 표현하는 방법을 이해한다. 포인터를 이용해 2차원 배열을 다루는 방법을 학습한다. 2차원 배열 필요성 2차원 배열은 굉장히 많은 목적으로 사용된다. 행렬 데이터를 표현 할 때, 그래프 알고리즘을 처리할 때, 다수의 실생활 데이터를 처리 할 때 등인데, 흔히 우리가 보는 표 구조가 2차원 배열과 흡사하다. 즉, 각각의 사용자에 대한 이름 정보가 있고, 어떠한 수치 데이터가 2차원 형태로 존재할 때, 2차원 배열로 모델링 하기 수월하다. 초기화 2차원 배열은 1차원 배열이 중첩되었다는 의매로, [](대괄호)를 두번 연속하여 쓴다. 자료형 배열이름[행][열] = {{값, 값, 값, ...}, {값, 값, 값, ...}, ...} 예를 들어, 10X10 의 행렬 ..
컴퓨터가 변수를 처리하는 방법 C언어에서 다양한 변수를 처리하는 방법을 학습한다. 지역변수, 전역변수, 레지스터 변수등을 학습하며, 특정한 함수에 값을 전달하거나 주소를 전달하는 방법을 이해한다. 프로그램 메모리 주소 컴퓨터에서 프로그램이 실행되기 위해서는 프로그램이 메모리에 적재(Load)되야 한다. 당연히 프로그램의 크기를 충당할 수 있을 만큼의 메모리 공간이 있어야 한다. 일반적인 컴퓨터의 운영체제는 메모리 공간을 네 가지로 구분하여 관리하며, 각각의 영역들은 서로 다른 기능들을 가진다. 코드 영역 데이터 영역 힙 영역 스택 영역 소스코드 전역 변수 정적 변수 동적 할당 변수 지역 변수 매개 변수 먼저 코드 영역에는 한줄 한줄 씩 실행 시킬 수 있는 소스코드가 적재 된다. 데이터 영역엔 전역 변수와..
문자열 전통적인 C언어에서 문자열을 다루는 방법과 다양한 문자열 관련 함수를 익히고 활용한다. 문자열의 개념 문자열이란 말 그대로 문자들의 배열이다. 문자열은 컴퓨터 메모리 구조상에서 마지막에 널(NULL)값을 포함한다. 컴퓨터에서 널(NULL)이란, '존재하지 않는다'라는 뜻으로, 즉 어떠한 값도 의미있는 값이 들어가 있지 않음을 의미한다. 이 널(NULL)값은 '\0'이라는 문자 형태로도 표현한다. 0 1 2 3 4 5 H E L L O \0 위의 문자열은 총 5개의 문자와 NULL값으로 이루어져 있다. 널값은 문자열의 끝을 알리는 목적으로 사용된다. printf() 함수를 실행하면 컴퓨터는 내부적으로 NULL을 만날 때 까지 출력한다. 이처럼 NULL값은 문자를 처리 할 때 중요한 요소로 사용된다...
문자 C언어에서 문자를 처리하는 방법에 대해 학습하고, 문자와 버퍼의 관계를 이해하고 활용하는 것을 목표로 한다. 아스키 코드 C프로그램의 문자는 아스키 코드(Ascii Code)를 따른다. 아스키 코드는 0~127중의 1바이트로 구성되며, 주요 문자를 출력하도록 해준다. cf) 한글 등과 같은 유니코드는 조금 더 많은 바이트로 구성된다. 다음과 같은 주요 문자는 외워두는게 좋다. 0~9 48~57 A~Z 65~ a~z 97~ 아스키 코드로 인해, 캐릭터형 자체에 숫자를 넣어서 처리할 수 있다. 문자 입출력에서 형식 지정자로 %c를 사용한다. (C언어에서의 문자가 아스키 코드를 따르므로 char형은 각각 '숫자'에 매치가 된다. 이는 컴퓨터가 사실 char형을 '숫자'로써 처리한다는 것이다.) #incl..

포인터 향후 고급 프로그래머가 되기 위해선, C언어의 포인터를 이해하고, 더 하위 레벨의 언어라고 할 수 있는 어셈블리어 또한 접하게 될것이다. 일반적인 웹 및 앱 개발을 할 땐 몰라도 문제는 없으나, 코어 모듈 개발을 할 필요가 있다면 반드시 잘 알고 넘어가야 할 부분이다. 포인터의 개념 지금까지 변수는 그 자체로 자신의 자료형에 맞는 값을 저장했다. (ex> int, double) 포인터(Pointer) 변수는 특이한 변수로, 메모리 주소를 저장한다.(메모리에 주소 값 자체를 담는다.) 또, 단순히 주소 값만 저장하는게 아니라, 어떤 자료형의 주소 값인지를 함께 저장한다. 어떤 int형 변수를 만들었다고 하면, 이 int형 변수는 컴퓨터 메모리 공간 어딘가에 저장이 된다. 이 때, 그러한 변수의 위치..