도전하는일반인 2021. 9. 24. 12:07

들어가기 전에

“EMMA”와 같은 문자열을 저장하기 위해서 string 이라는 자료형을 사용하였었습니다. 하지만 이는 실제로 C에서 존재하지 않는 자료형입니다. 문자열이 실제로 메모리상에 어떻게 저장되어 있는지, 문자열을 손쉽게 저장하고 접근하기 위한 방법을 배워봅니다.

 

학습 목표

문자열 형태의 새로운 자료형인 string이 어떻게 정의되었는지 설명할 수 있습니다.

 

핵심 단어

  • 포인터
  • 문자열

 

아래와 같이 s에 “EMMA”라는 값을 저장한다고 생각해 봅시다.string s = “EMMA”;

문자열은 결국 문자의 배열이고, s[0], s[1], s[2], … 와 같이 하나의 문자가 배열의 한 부분을 나타냅니다.

가장 마지막의 \0은 0으로 이루어진 바이트로, 문자열의 끝을 표시하는 약속입니다.

 

 

여기서 변수 s는 결국 이러한 문자열을 가리키는 포인터가 됩니다.

더 상세히는 문자열의 가장 첫번째 문자, 즉 주소 0x123에 있는 s[0]를 가리키게 됩니다.

 

 

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

typedef char *string

 

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

따라서 아래 두 코드는 동일하게 동작할 것입니다.

 

  1. string 자료형을 이용하여 “EMMA” 출력

  1. char 포인터를 이용하여 “EMMA” 출력

2번 코드의 char *s에서 s라는 변수는 문자에 대한 포인터가 되고, “EMMA”라는 문자열의 가장 첫 번째 값을 저장하기 때문이죠.

 

 

생각해보기


string 자료형을 정의해서 사용하면 어떤 장점이 있을까요?

 

나의 생각 : 포인터를 정의하지 않아도 쉽게 문자열 사용이 가능하다. 

 

 

출처 : https://www.boostcourse.org/cs112/lecture/119029?isDesc=false 네이버커넥트재단