최대 1 분 소요

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


우리는 여태껏 문자열을 저장하기 위해 CS50 라이브러리에 포함된 string 자료형을 사용하였었습니다.
아래와 같이 s에 “EMMA”라는 값을 저장한다고 생각해 봅시다.

string s = EMMA;

문자열은 결국 문자의 배열이고, s[0], s[1], s[2], … 와 같이 하나의 문자가 배열의 한 부분을 나타냅니다.
가장 마지막의 \0은 0으로 이루어진 바이트로, 문자열의 끝을 표시하는 약속입니다.
스크린샷 2023-06-16 오후 10 50 40
여기서 변수 s는 결국 이러한 문자열을 가리키는 포인터가 됩니다.
더 상세히는 문자열의 가장 첫번째 문자, 즉 주소 0x123에 있는 s[0]를 가리키게 됩니다.
스크린샷 2023-06-16 오후 10 50 48

실제 CS50 라이브러리를 보면 string 자료형은 아래와 같이 정의되어 있습니다.

typedef char *string

여기서 typedef는 새로운 자료형을, char *은 문자에 대한 포인터를, string은 자료형의 이름을 의미합니다.

#include <stdio.h>

int main(void)
{
  // char *s에서 s라는 변수는 문자에 대한 포인터가 되고, “EMMA”라는 문자열의 가장 첫 번째 값을 저장한다.
  char *s = "EMMA";

  // s의 주소는 사실상 첫 번째 문자의 주소이다.
  printf("%p\n", s); // 0x42ab52
  printf("%p\n", &s[0]) // 0x42ab52

  // 1바이트씩 차이난다.
  printf("%p\n", &s[1]) // 0x42ab53
  printf("%p\n", &s[2]) // 0x42ab54
  printf("%p\n", &s[3]) // 0x42ab55
}


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

맨 위로 이동하기

태그:

카테고리:

업데이트: