컴퓨터는 문자 자체를 저장할 수 없습니다
✔ 컴퓨터는 오직 “숫자”만 저장할 수 있습니다
- 우리가 보기엔 '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 |