본문 바로가기
cs/CS50

3: 배열-4(문자열과 배열)

by 이쟝 2021. 11. 27.

문자열(string) 자료형의 데이터 == 문자(char) 자료형의 데이터들의 배열

 

string s = “HI!”;가 문자열 s가 정의되어 있음

  • s는 문자의 배열이기 때문에 메모리 상에 아래 그림과 같이 저장되고, 인덱스로 각 문자에 접근할 수 있음
  • 널 종단 문자(null-terminator): 문자열의 끝을 나타내는 문자로, '\0'라고 정의함
  • 널 종단은 문자열에게 문자열이 끝났고 더 이상의 문자가 남아있지 않다고 말하는 문자

여러 이름이 포함된 names라는 문자열이 선언된 경우

 

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    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라는 문자열 형식의 배열에 네 개의 이름이 저장되어 있음(EMMA, RODRIGO, BRAIN, DAVID)
  • 첫 번째 printf와 두 번째 printf의 결과는 같음 → EMMA
  • EMMA의 이름은 string이고 string은 문자들의 배열이기 때문에 char로도 나타낼 수 있음

첫 번째 printf : names 배열의 첫 번째 인덱스의 값, 즉 "EMMA"를 출력

두 번째 printf

  1. char를 쓰기 때문에 형식지정자 %s가 아닌 %c를 사용. 여기서 출력하는 것은 문자열이 아닌 문자이고, 2차원 배열이 생김
  2. 각 문자의 주소를 대괄호를 사용해서 나타낼 수 있음!
  3. 첫 번째 대괄호는 어떤 이름인지를 찾고 두 번째 대괄호는 그 이름의 몇 번째 글자인지를 찾음
  4. 첫 번째 names[0]dms names의 첫 번째 인덱스의 값 EMMA를 가리킴
  5. 두 번째 [0],[1],[2],[3]은 이름을 문자들의 배열로 봄 그중 0번째 문자(E), 1번째 문자(M), 2번째 문자(M), 3번째 문자(A)
  6. 그래서 names[0][1]은 names 배열에서 첫 번째 인덱스 값, 즉 "EMMA"라는 문자열에서, 그 두 번째 값, 즉'M'이라는 문자를 의미함

이렇게 names가 실제 메모리상에 저장된 예시와 해당하는 인덱스를 확인할 수 있음

 

 

 

https://www.boostcourse.org/cs112/joinLectures/41307

 

모두를 위한 컴퓨터 과학 (CS50 2019)

부스트코스 무료 강의

www.boostcourse.org

 

'cs > CS50' 카테고리의 다른 글

3: 배열-6(명령행 인자:command-line arguments)  (0) 2021.11.28
3: 배열-5(문자열의 활용)  (0) 2021.11.28
3: 배열-3(메모리와 배열:전역변수)  (0) 2021.11.25
3: 배열-2(버그와 디버그)  (0) 2021.11.25
3: 배열-1(컴파일링)  (0) 2021.11.25