[C언어] 문자와 문자열 포인터
문자열은 char 포인터 형식으로 사용한다.
char *변수이름 = "문자열";
형식은 위와 같다.
예제를 통해 알아보자.
#include <studio.h>
int main() {
char c1 = 'a'; // 변수에 문자 'a' 저장
char *s1 = "Hello"; // 포인터에 문자열 "Hello"의 주소 저장
printf("%c\n", c1); // a: %c로 문자 출력
printf("%s\n", s1); // Hello: %s로 문자열 출력
return 0;
}
문자 char는 'a'처럼 글자가 하나만 있는 상태를 뜻하고,
문자열 char *은 "Hello"처럼 글자 여러 개가 계속 이어진 상태를 뜻한다.
👉 문자는 1바이트 크기의 char에 저장할 수 있지만 문자열은 크기가 1바이트를 넘으므로 char에 저장할 수 없다.
👉 문자열은 변수에 직접 저장하지 않고 포인터를 이용해서 저장한다.
아래 사진은 문자와 문자열의 저장 방식을 나타낸 것이다.
포인터는 메모리 주소를 저장하므로 메모리 주소를 보고 문자열이 저장된 위치로 이동하게 된다.
문자열이 저장된 메모리 주소를 출력하고 싶다면 서식 지정자로 %p를 사용하면 된다.
문자는 변수 c1 안에 그대로 저장되지만 문자열 리터럴이 변수 s1 안에 저장되지 않고, 문자열이 있는 곳의 메모리 주소만 저장된다.
단, 이 문자열 리터럴이 있는 메모리 주소는 읽기 전용이므로 다른 문자열을 덮어쓸 수는 없다.
또한, 문자열 리터럴이 저장되는 위치는 컴파일러가 알아서 결정하므로 우리가 신경쓸 필요는 없다.
문자열을 사용할 때는 char 포인터에 " "(큰 따옴표)로 묶은 문자열만 할당하면 된다.
그리고 printf로 문자열을 출력할 때는 서식 지정자로 %s를 사용하면 된다.
C 언어의 문자열은 항상 마지막에 NULL 문자가 붙지만, 이것은 문자열의 끝을 나타내기 때문에
printf로 문자열을 출력할 때 문자열을 계속 출력하다가 NULL에서 출력을 끝낸다.
NULL이 마침표 같은 역할을 한다고 생각하면 된다.
참고
https://dojang.io/mod/page/view.php?id=1783