C

문자열 상수

1space 2025. 6. 14. 07:54

컴퓨터는 문자 자체를 저장할 수 없습니다

✔ 컴퓨터는 오직 “숫자”만 저장할 수 있습니다

  • 우리가 보기엔 'A'라는 문자가 있지만,
  • 컴퓨터에게는 'A'도 그냥 숫자 65입니다.
  • 왜 65일까요? → ASCII 코드 덕분입니다.

ASCII 코드란?

✔ ASCII (American Standard Code for Information Interchange)

  • 문자 하나하나에 정수값을 부여한 표준
  • 예시:
문자ASCII 값 (10진수)
'A' 65
'B' 66
'a' 97
'0' 48
'\n' 10 (줄바꿈)
'\0' 0 (문자열 끝)
 

💡 그래서 char ch = 'A';라고 선언하면?

  • 실제 메모리에는 문자 'A'가 저장되는 것이 아니라
  • 정수 65가 1바이트 크기로 저장됩니다.

 

문자 상수 vs 문자열 상수의 차이

문자 'A' 정수 65 1바이트 정수
문자열 "A" 문자열 "A\0" 주소값
 

문자열 상수의 정체

✔ "hello"는 우리가 보기엔 문자열이지만,

컴파일러는 이것을 메모리에 저장하고,
"저장된 첫 글자(h)의 주소"를 기억합니다.

예를 들어 "apple"이라면 메모리에 다음과 같이 저장됩니다:

주소값
1000 'a'
1001 'p'
1002 'p'
1003 'l'
1004 'e'
1005 \0 (문자열 끝 표시)

✔ 그래서 "apple"은 실제로는 char* → 주소값 1000 같은 의미입니다.

 

문자열 끝은 어떻게 아는가? → \0

  • 문자열이 어디서 끝나는지를 알려면 뭔가 끝 표시가 필요합니다.
  • C 언어에서는 이 표시로 널 문자 \0를 씁니다.
 
char str[] = "hello";

이 배열은 실제로 다음과 같이 저장됩니다:

'h' 'e' 'l' 'l' 'o' '\0'

총 6바이트가 필요합니다 (문자 5개 + 종료 표시 1개)

 

‘A’와 “A”는 완전히 다릅니다

'A' 정수 65 (1바이트)
"A" 문자 'A'와 종료문자 '\0' → 2바이트 (char[2])
"A"는 주소값 → char *로 처리됨  

따라서 'A' != "A"이며,
'A'는 정수처럼 연산이 가능하지만
"A"는 문자열의 시작 주소일 뿐입니다.

 

 

문자열은 주소이므로 포인터로 다룹니다

char *p = "hello";
  • "hello"라는 문자열 자체가 첫 글자 'h'가 저장된 주소값입니다.
  • 포인터 p는 그 주소값(예: 0x1000)을 저장함
  • 따라서 p[0] == 'h', p[1] == 'e', ..., p[5] == '\0'

 

정리 요약

문자 'A' 정수 65로 저장됨, 1바이트
문자열 "A" 'A' + '\0' → 2바이트, 주소값으로 사용됨
ASCII 코드 문자를 숫자로 매핑한 표준
문자열 끝 항상 \0로 구분됨
'A' != "A" 전혀 다른 타입 (char vs char*)

'C' 카테고리의 다른 글

문자열을 배열로 처리할 때 주의할점  (0) 2025.06.14
배열 vs 포인터 : 문자열처리  (0) 2025.06.14
void 포인터  (0) 2025.06.14
포인터 상수  (0) 2025.06.14
2차원 배열  (0) 2025.06.14