1 분 소요

❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.


배열

스크린샷 2023-06-19 오전 12 27 31

문자열

스크린샷 2023-06-19 오전 12 25 05

우리가 여지껏 사용한 문자열(string) 자료형의 데이터는 사실 문자(char) 자료형의 데이터들의 배열이었습니다.

string s = “HI!”; 과 같이 문자열 s가 정의되어 있다고 생각해봅시다.
s는 문자의 배열이기 때문에 메모리상에 아래 그림과 같이 저장되고, 인덱스로 각 문자에 접근할 수 있습니다.
스크린샷 2023-06-19 오전 12 20 28

여기서 가장 끝의 ‘\0’은 문자열의 끝을 나타내는 널 종단 문자입니다.

  • \0 (=널 종단 문자)
    • 단순히 모든 비트가 0인 1바이트를 의미합니다.
    • 문자열의 끝을 나타낼 때 사용합니다.
      • 따라서 길이가 3인 문자열은 사실 4바이트를 차지합니다. (\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]);

names라는 문자열 형식의 배열에 네 개의 이름이 저장되어있습니다.

첫 번째 printf에서는 names의 첫번째 인덱스의 값, 즉 “EMMA”를 출력합니다.
두 번째 printf에서는 형식 지정자가 %s가 아닌 %c로 설정되어 있음을 확인할 수 있습니다.
따라서 출력하는 것은 문자열이 아닌 문자입니다.

여기서는 각 이름의 두번째 문자를 출력하고자 합니다.
이는 names[0][1]과 같이 2차원 배열을 통해 접근할 수 있습니다.
다시 말해 names[0][1]는 names의 첫 번째 값, 즉 “EMMA”라는 문자열에서, 그 두번째 값, 즉 ‘M’ 이라는 문자를 의미합니다.

아래 그림에서 names가 실제 메모리상에 저장된 예시와 해당하는 인덱스를 확인할 수 있습니다.
스크린샷 2023-06-19 오전 12 22 45



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기

태그:

카테고리:

업데이트: