앞서 구조체 배열을 배웠을 때 만약 게임 중에 캐릭터가 추가되거나 삭제되면 고정된 배열 크기는 어떻게 동작하는지 의문이 들었을 수도 있다. 컴퓨터가 우리 프로그램에 메모리를 빌려주는 방식은 크게 두 가지가 있다.1. 정적 할당(Static Allocation): 고정된 메모리 크기 할당-> 우리가 지금까지 하던 방식이다. int score; 혹은 char role[20]; 처럼 코드를 짤 때 미리 크기를 정해두는 것이다.하지만 공간을 설정할 때 사용을 얼마 하지 못하면 메모리가 낭비되고, 설정한 크기보다 메모리를 많이 사용해야 하면 메모리가 부족해서 프로그램이 터져 버린다. 그래서 프로그램이 실행되는 도중에는 이 메모리 공간을 늘리거나 줄일 수 없다. 2. 동적 할당(Dynamic Allocation):..
이번에는 구조체에 대해 알아보자. 우선 게임 캐릭터의 정보를 저장하는 프로그램을 만든다고 가정해보자.만약 캐릭터가 100명이 된다면 이대로 계속 변수를 300개나 만들어야 한다.심지어는 이름, HP, MP가 서로 다른 변수라 한 눈에 보이지도 않는다. 이렇게 파편화된 변수들을 하나로 묶어주는 일종의 '양식'이 있다면, 굳이 캐릭터마다 변수 이름을 달리 할 필요 없이 서류 한 장에 이름 HP, MP 칸을 다 만들어 두고 새 캐릭터를 생성할 때마다 그 서류 양식을 그대로 찍어내면 되지 않을까? 이 기능을 하는 것이 바로 '구조체'이다.구조체란, 하나 이상의 변수를 묶어서 좀 더 편리하게 사용할 수 있도록 도와주는 도구이다. 구조체는 쉽게 설명해서 일종의 카테고리를 만들어서 하나의 자료형으로 사용한다.[i..
이번에는 c언어에서 가장 중요하지만 사람들이 많이 어려워 하는 개념인 '포인터'에 대해서 알아보자. 포인터(Pointer)란 "메모리 주소"를 저장하는 변수이다. (말 그대로 주소'만' 저장할 수 있다) 예를 들어, int num = 10; 이라는 변수를 선언했다고 가정해보자.그렇다면 메모리 공간 중 하나에 10을 저장하고 있을 것이고, 메모리 공간의 주소가 있을 것이다.메모리 주소를 1000 이라고 한다면 변수 이름은 num, 값은 10, 주소는 1000이 된다. 여기서 포인터는 1000이라는 주소를 저장하는 변수이다. 포인터 변수를 선언하는 방법은 int* ptr; 와 같이 포인터 변수를 선언할 때는 담고자 하는 자료형에 *를 붙여서 선언한다. int *ptr; int* ptr; int * ptr..
이번에는 함수에 대해서 알아보자. 함수란 입력->처리->출력 구조를 가진 독립된 기능 단위이다.예를 들어 3과 5를 입력하면 더하기가 처리되어 출력을 8로 한다. 이렇게 작은 기능을 구현해놓은 것이 바로 함수이다. 만약 함수가 없다면 같은 코드를 계속해서 반복해야 할 것이고, 같은 역할의 코드를 수정할 때 각 따로 고쳐야 할 것이며 코드가 길고 읽기가 어려울 것이다. 반환형 함수이름(매개변수){ 실행문; return 값;} 함수의 구조는 반환형, 함수이름, 매개변수(parameter)로 구성되어 있는데, 매개변수란 함수에 전달하는 입력값이다. 함수를 사용하는 방법은 2가지가 존재하는데, 함수를 선언과 구현을 동시에 하거나 함수를 선언하고 나중에 구현하는 방식이다. 예를 들어 어떤 수를 2..
이번에는 조건문을 응용하여 여러 문제를 해결하는 과정들을 알아보자 먼저 배열의 홀짝 판별이다. 예제를 살펴보자.% 연산자를 사용하여 배열을 검사하고, 2로 나누었을 때 나머지가 0이면 짝수, 나머지가 1이면 홀수이다.이때 변수를 1씩 증가하게 만들면 개수를 구할 수 있다. 배열의 수가 홀수인지 짝수인지와 각각의 개수가 몇개인지 출력된 것을 확인할 수 있다. 다음은 배열에서 가장 작은 수 구하기 이다.배열의 수들 중 가장 작은 수를 구하기 위해 가장 작은 정수값이 담길 min 변수를 선언해주고 배열에서 첫번째를 기준을 잡은 후, if문을 사용해 배열의 원소를 모두 검사해 이 원소보다 작으면 min 변수에 그 원소를 대입한다(반복문이 계속 반복하면서 더 이상 min에 들어있는 원소보다 작은 수가 없도록..
조건문이란 프로그램이 특정 조건에 따라 다른 동작을 하게 만드는 기능이다. 예를 들어 '만약 점수가 90점 이상이면', A학점을 출력한다. '만약 비가 오면', 우산을 챙긴다 등이 있다.C언어에서 가장 많이 사용하는 조건문은 if문, if~else문, else if문, switch문이 있다. 먼저 if문은 가장 기본적인 조건문으로if (조건식){ 실행문;}의 구조로 이루어져 있다. 조건문 안에 있는 조건식은 결과가 항상 참/거짓 중 하나로 나온다.주로 조건식은 비교 연산자(==, !=, >, =, 예시를 보자조건식이 참일 경우 조건식 안의 내용이 실행되는 방식이다.age는 20이 대입 되어있으므로, age가 19이상인 조건은 참이되어 출력이 된다.만약 조건이 거짓일 경우 중괄호 안의 코드는 무시..
이번에는 2차원 배열에 대해서 알아보자2차원 배열은 데이터를 행과 열 형태로 저장하는 배열이다. 1차원 배열은 한줄로 데이터를 저장하지만, 2차원 배열은 표 형태로 저장하기 때문에 2개의 대괄호가 필요하다.2차원 배열은 1차원과 마찬가지로 실제 메모리에서는 한 줄로 저장된다. 2차원 배열 선언은 "자료형 배열이름[행 크기][열 크기];" 의 방식으로 선언하면 된다배열을 생성할 때는 세로-가로 순서로 길이를 지정한다. 이차원 '배열'이기 때문에 세로, 가로도 전부 index 0부터 시작한다.헷갈릴 수 있지만, 행이 [i], 열이 [j] 인 위치에 어떤 데이터가 들어가 있는가만 보면 된다. 예를 들어 int arr[3][4]; 로 배열을 선언하면행이 [0]일때 열은[0],[1],[2],[3]행이 [1]일때 ..
문자열(String)이란, 여러 개의 문자를 나열한 데이터이다. C언어에서는 문자열 전용 자료형이 따로 존재하지 않는다.그렇다면 어떻게 문자열을 나타낼까? 이전에 배운 것들을 잘 생각해보면 쉽게 답을 찾을 수 있다. 문자를 나타낼 때 사용하는 자료형은 바로.... char이다. 그렇다면 '단일 문자'를 나열하면 될텐데... 그렇다. 바로 '배열'을 사용하면 된다.예시로 str이라는 이름의 배열에 Hello 문자열을 대입한 코드를 작성했다 (문자열에는 큰따옴표를 사용해야 한다) 메모리 구조를 살펴보면indexstr[0]str[1]str[2]str[3]str[4]str[5]값Hello\0index 0~4까지 H,e,l,l,o가 저장되어있고 5번째 index에 \0이 저장되어 있는 것을 알 수 있다. 이것..