C언어 문자열 포인터 (char *)

코딩C언어
읽는데 5분 소요
처음 쓰여진 날: 2026-03-06
마지막 수정일: 2026-03-06
조회수: 14

요약

C언어 문자열 포인터의 핵심 개념을 알아봅니다. char *와 char []의 차이, 문자열 리터럴과 포인터의 관계, %s와 %c 출력 차이를 정보처리기사 실기 대비 핵심 내용으로 정리합니다.

문자열 포인터 핵심 정리

개념설명예시
문자열 포인터문자열의 시작 주소를 저장하는 포인터char *p = "ABC";
문자열 리터럴읽기 전용 메모리에 저장된 문자열"HELLO"
char * vs char []포인터 vs 배열, 수정 가능 여부가 다름아래 설명 참조

문자열 포인터란?

문자열 포인터문자열의 시작 주소를 저장하는 포인터입니다.

c
코드 하이라이팅 중...
text
코드 하이라이팅 중...

문자열 리터럴 "HELLO"는 메모리에 저장된 char 배열이고, 그 시작 주소가 포인터 p에 저장됩니다.


char *char []의 차이

c
코드 하이라이팅 중...

두 선언 모두 "HELLO"라는 문자열을 다루지만, 동작 방식이 다릅니다.

구분char *p = "HELLO"char arr[] = "HELLO"
저장 방식p는 문자열 리터럴의 주소를 저장arr에 문자열을 복사하여 저장
수정 가능 여부수정 불가 (읽기 전용)수정 가능
다른 문자열 가리키기가능 (p = "BYE")불가능
c
코드 하이라이팅 중...


문자열 포인터로 값 읽기

배열 인덱싱과 포인터 역참조

문자열 포인터에서 특정 위치의 문자를 읽는 방법은 두 가지입니다.

c
코드 하이라이팅 중...

p[i]*(p + i)완전히 동일합니다.

%s%c의 차이

printf에서 문자열 포인터를 출력할 때, 형식 지정자에 따라 결과가 달라집니다.

c
코드 하이라이팅 중...

%s — 해당 주소부터 널 문자까지 출력

c
코드 하이라이팅 중...

%c — 해당 주소의 문자 하나만 출력

c
코드 하이라이팅 중...
코드형식의미출력
printf("%s", p)문자열p 주소부터 '\0'까지KOREA
printf("%s", p + 3)문자열p+3 주소부터 '\0'까지EA
printf("%c", *p)문자p가 가리키는 한 문자K
printf("%c", *(p + 3))문자p+3이 가리키는 한 문자E

문자열 리터럴은 주소다

문자열 리터럴 "HELLO"는 그 자체가 메모리 주소입니다. 따라서 문자열 리터럴에 직접 포인터 산술을 사용할 수도 있습니다.

c
코드 하이라이팅 중...

이 원리는 구조체 멤버가 const char * 타입일 때도 동일하게 적용됩니다.

c
코드 하이라이팅 중...

t.g"DC"의 시작 주소이므로, t.g + 1은 두 번째 문자 'C'의 주소입니다. %s로 출력하면 "C"가 출력됩니다.



배열 이름도 포인터처럼 동작

char 배열의 이름은 첫 번째 요소의 주소입니다. 따라서 배열 이름을 char * 포인터에 저장할 수 있습니다.

c
코드 하이라이팅 중...
표현의미
a배열의 시작 주소 (= &a[0])주소
pa의 시작 주소를 저장주소
*a배열의 첫 번째 문자'A'
*pp가 가리키는 문자'A'
a[1]배열의 두 번째 문자'r'
p[1]포인터로 접근한 두 번째 문자'r'

문자열 포인터와 함수

문자열을 함수에 전달할 때 char * 매개변수를 사용합니다.

문자열 길이 계산

c
코드 하이라이팅 중...

포인터 pp++로 한 칸씩 이동시키면서 널 문자를 만날 때까지 세는 방식입니다.

const char * — 읽기 전용 포인터

const가 붙으면 포인터가 가리키는 값을 수정할 수 없습니다. 원본 문자열을 보호할 때 사용합니다.

c
코드 하이라이팅 중...

const char *s는 원본(source)을 읽기만 하고, char *d는 대상(destination)에 쓰기를 합니다. 문자열 복사에서 자세히 다룹니다.


정보처리기사 실기 대비 문제