우리는 이전에 string
이라는 자료형을 사용했었지만, 이는 실제로 C에서 존재하지 않는 자료형이다.
문자열이 실제로 메모리상에 어떻게 저장되어 있는지, 문자열을 손쉽게 저장하고 접근하기 위한 방법을 배워보자.
우리는 지금까지 문자열을 저장하기 위해 CS50 라이브러리에 포함된 string
자료형을 사용했었다.
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 자료형을 이용한 출력
#include <cs50.h>
#include <stdio.h>
int main(void)
{
string s = "EMMA";
printf("%s\n", s); // EMMA
}
2. char 포인터를 이용한 출력
#include <stdio.h>
int main(void)
{
char *s = "EMMA";
printf("%s\n", s); // EMMA
}
s
라는 변수는 문자에 대한 포인터가 되고, "EMMA"라는 문자열의 가장 첫 번째 값을 저장한다.
생각해보기
string 자료형을 정의해서 사용하면 어떤 장점이 있을까?
정답
가독성이 좋아진다.
- 직관적으로 문자열 변수라는 걸 알 수 있다.
- 포인터 변수를 붙이지 않아도 자동으로 문자열 첫번째를 가리키는 포인터 변수 역할을 해준다.