이전에 설명했듯이 C에는 다음과 같은 자료형이 있고 각각의 자료형은 서로 다른 크기의 메모리를 차지한다.
만약에 다음과 같이 3개의 점수를 저장하고 평균을 내는 프로그램이 있다고 하자.
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int score1 = 72;
int score2 = 73;
int score3 = 33;
printf("Average: %i\n", (score1 + score2 + score3) / 3);
}
현재 코드에서는 점수를 3개만 받고있지만, 더 많은 점수를 받으려면 변수를 계속 추가해나가야할까?
이러한 상황을 해결할 수 있는것이 바로 배열이다.
배열은 같은 자료형의 데이터를 메모리상에 연이어 저장하여 하나의 변수로 관리할 수 있게 해준다.
위의 코드를 배열을 사용하면 다음과 같이 변경할 수 있다.
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int scores[3];
scores[0] = 72;
scores[1] = 73;
scores[2] = 33;
printf("Average: %i\n", (scores[0] + scores[1] + scores[2]) / 3);
}
위에서 배열은 데이터를 메모리상에 연이어 저장하는 것 이라고 했는데, 문자열은 사실 char의 배열로 이루어져있다.
자료형의 크기가 고정적으로 정해져있는 다른 자료형들과 달리 문자열은 자료형의 크기가 가변적이다. 왜냐하면 들어오는 문자열의 크기만큼 공간을 확보해야하기때문이다.
그렇다면 해당 문자열이 끝나는 부분이 어디인지 어떻게 알아낼 수 있을까?
바로 \0라는 종단 문자를 활용하여 배열의 마지막 부분을 알 수 있다.
위 그림과 같이 문자열은 char의 배열로 이루어져있으며, \0를 통해 해당 문자열이 끝났다는 것을 알려준다.
string names[4];
names[0] = "EMMA";
names[1] = "RODRIGO";
names[2] = "BRIAN";
names[3] = "DAVID";
printf("%s\n", names[0]);
printf("%c%c%c%c\n", names[0][0], names[0][1], names[0][2], names[0][3]);
따라서 위와 같은 문자열 배열을 만들었을 경우 아래와 같이 메모리에 저장된다. 물론 간단히 추상화 한 그림이다.
네이버 부스트코스 모두를 위한 컴퓨터 과학 (CS50 2019)
https://www.boostcourse.org/cs112/lecture/119014
https://www.boostcourse.org/cs112/lecture/119015
https://www.boostcourse.org/cs112/lecture/119016