본문 바로가기

c

(8)
컴퓨터가 변수를 처리하는 방법 컴퓨터에서 프로그램이 실행되기 위해서는 프로그램이 메모리 공간에 적재되어야 합니다. 메모리에 적재된 이후에는 CPU가 한 줄 한 줄 읽어 내려가며 프로그램을 실행합니다. 또한 프로그램을 실행하기 위해서는 프로그램의 크기를 충당할 수 있을 만큼의 메모리 공간을 확보해야 합니다. 흔히 우리가 사용하는 컴퓨터의 메모리는 8gb 또는 16gb로 구성되어 있는데 특정한 프로그램을 실행하면 그 프로그램이 메모리에 적재가 되어 실행이 되는 것입니다. 기본적으로 컴퓨터의 운영체제는 메모리 공간을 아래 그림과 같이 네 가지로 구분하여 관리합니다. 네 가지로 구분되는 각각의 메모리 속 영역은 서로 다른 기능들을 가지고 있습니다. 코드 영역은 그 이름과 같이 한 줄씩 실행할 수 있는 소스코드입니다. 데이터 영역은 변수 중에..
문자 1. 아스키 코드 기본적으로 C 프로그램의 문자는 아스키 코드(Ascii Code)를 따릅니다. 아스키 코드는 1바이트로 구성되는 것으로 0부터 127까지 각각의 번호에 따라 서로 다른 문자를 가지고 있습니다. 0부터 9까지의 숫자는 48부터 57까지의 아스키코드에 해당이 됩니다. 즉, 아스키코드의 48번은 문자 0이 되는 것입니다. 마찬가지로 영문 A는 아스키코드의 65번에 해당하고 영문 소문자 a는 아스키코드의 97번에 해당합니다. 캐릭터형 자체에 아스키코드를 넣어서 아스키코드에 해당하는 문자를 출력하는 예제를 작성해보겠습니다. #include int main(void) { char a = 65; printf("%c\n", a); system("pause"); } 결과: A 계속하려면 아무 키나 누르..
포인터 1. 포인터의 개념 포인터를 제외한 변수를 생각했을 때, 변수는 그 자체로 자신의 자료형에 맞는 값을 저장합니다. 그 예로 int형 변수, double형 변수 등이 있습니다. 포인터 변수는 기존의 변수와는 다르게 메모리에 주소 값을 저장합니다. 또한 단순히 주소 값만 저장하는 것이 아니라 어떤 자료형의 주소 값인지도 함께 저장합니다. 수업시간에 교수님께서 사용하시는 레이저 포인터는 칠판의 어딘가를 가리킬 때 사용합니다. 마찬가지로 컴퓨터의 포인터도 메모리의 주소를 가리키고 해당 메모리에 직접 접근할 수 있게 도와줍니다. int a = 5; 다음과 같이 a라는 변수가 초기화 되었다고 가정해보겠습니다. 이와 같이 정의하는 방식은 위 코드 다음에 다른 코드를 작성했을 때 단순히 a를 사용해서 5라는 값을 찾을..
배열 1. 배열을 사용하는 이유 3개의 정수가 있을 때 가장 큰 정수를 구하는 프로그램을 작성한다고 가정해보겠습니다. 3개의 정수를 변수 3개에 각각 넣어 비교하는 구문을 작성할 것입니다. 그렇다면 정수가 100개가 있을 때는 또 다시 100개의 변수를 만들어야 할까요? 사실 100개 정도 만드는 것 쯤이야 크게 문제될 것은 없습니다만, 솔직히 굉장히 비효율적인 방식이라 부담이 되는 것은 사실입니다. 만약 100,000,000개의 정수가 있다면 사람이 하나하나 변수를 지정하는 것은 불가능한 일입니다. 이러한 경우들에는 동일한 자료형을 여러 개 담는 기술이 필요할 텐데요, 이때 도움이 되는 것이 바로 배열입니다. 다음과 같이 인덱스가 0부터 7까지 있는 배열이 있다고 가정해보겠습니다. 우리가 일반적으로 숫자를 ..
반복문 1. for문 for문은 내부의 조건에 부합하면 계속해서 특정한 구문을 실행하는 특성을 가지고 있습니다. 반복문에서 탈출하려면, 반복문을 탈출하고자 하는 위치에 break구문을 삽입하면 됩니다. for문의 형식은 아래와 같습니다. for (초기식; 조건식; 증감식) { // 반복할 코드 } 초기식이 가장 먼저 실행됩니다. 그 뒤 조건식으로 가서 해당 조건을 만족하면 반복할 코드를 실행합니다. 조건을 만족하지 못한다면 for문을 종료시킵니다. 조건식을 만족해서 코드가 실행되었다면 이후 증감식을 실행시킨 뒤 다시 조건식을 판별합니다. 1부터 100까지의 정수를 출력하는 예제를 작성해보면서 상세히 다루어 보겠습니다. 1.1. 예제1: 0부터 100까지의 정수를 출력하기 #include int main(void..
조건문 1. if문 if문은 내부의 조건을 검사해서 프로그램의 진행 경로를 결정합니다. 또한 조건의 개수가 많지 않을 때 사용하는 것이 적합합니다. if문은 아래와 같은 형식으로 작성됩니다. if (조건1) { // 조건1에 부합할 때 } else if (조건2) { // 조건1에 부합하지 않지만 조건2에 부합할 때 } else { // 위 조건들에 모두 부합하지 않을 때 } 예제를 통해서 if문이 어떻게 돌아가는지 알아보겠습니다. 1.1. 예제 1 가게에 손님이 왔을 때 2명 이하는 2인석으로, 3명 또는 4명일 때는 4인석으로, 5명 이상은 대형석으로 안내해주는 프로그램을 만들어 보겠습니다. #define _CRT_SECURE_NO_WARNINGS #include int main(void) { printf(..
연산자 1. 연산자와 피연산자의 개념 연산자(Operator) 는 연산을 수행하는 기호를 의미하고, 피연산자(Operand) 는 연산에 포함되는 변수나 상수를 의미합니다. A+B를 예로 들어보면 A와 B는 피연산자에 해당하며 + 는 연산자에 해당하는 것입니다. 1.1. 이스케이프 시퀀스(Escape Sequence) 연산자의 종류에 대해서 하나씩 알아보기 전에 잠시 이스케이프 시퀀스에 대해 짚고 넘어가겠습니다. 사실 이스케이프 시퀀스는 간단한 코드를 앞에서 먼저 다루면서 자연스럽게 자주 사용했습니다. 예를 들어 아래와 같은 코드를 프로그램 안에서 자주 보았을 것입니다. 아래의 코드에서 \n은 줄바꿈의 역할을 합니다. printf("%d\n", a > b); 이 외에도 다양한 이스케이프 시퀀스가 존재합니다. 이스..
변수와 상수 1. 기본적인 소스코드 내용에 대한 이해 아래의 Hello World 라는 기본적인 프로그램을 통해서 소스코드의 기본적인 내용을 알아보겠습니다. #include int main(void) { printf("HELLO WORLD\n"); system("pause"); return 0; } 1.1. 라이브러리 불러오기 C와 C++에서는 #include라는 명령어를 통해서 다양한 라이브러리를 불러올 수 있습니다. #include 위 코드에 작성된 라이브러리에는 다양한 기본적인 기능이 담겨 있는데 그 예로 printf()와 같은 함수가 있습니다. stdio.h의 stdio 는 Standard Input Output의 약자입니다. 1.2. 메인함수 프로그램은 항상 메인 함수로부터 시작됩니다. 또한 함수는 반환 값..