■ 문자열을 표현하는 방법은 크게 두가지가 있다.
char str1[5] =
"abcd"; //문자열 변수
char *str2 =
"ABCD"; //문자열 상수
(1) 문자열 변수
:
자료형 char형인 str1이라는 이름의 배열을 선언하고, 대입 연산자 오른쪽에 선언된 문자열을 저장하고 있다.
따라서 str1이
저장하고 있는 문자열은 변수가 된다.
[ a
| b | c |
d | \0 ]
str1[0] str1[1] str1[2] str1[3] str1[4]
(2) 문자열 상수
: 대입 연산자의 왼쪽에 char형 포인터를 선언하고, 오른쪽에는 "ABCD"라는 문자열을 선언하고 있다.
이는 포인터 str2를 이용해서 문자열 상수"ABCD"를 가리키겠다는 의미가 된다.
따라서 str2는 문자열의 첫 문자 'A'를 가리키게 된다. 포인터의 타입이 char*인 이유도 여기에 있다.
[●]-----------------> [ A B C D \n ]
포인터 문자열 상수
배열 str1은 문자열 전체를 저장하고 있는 것이고,
포인터 str2는 메모리에 저장되어 있는 문자열 상수 "ABCD"를 단순히 가리키고만 있다.
예시 |
#include <stdio.h>
: |
- str1은 문자열 변수이고, str2는 문자열 상수
이다.
- str1이 가리키는 문자열은 변수 이므로 문제가 없지만, str2가 가리키는 문자열은 상수이므로 변경 시 문제를
일으킨다.
(3) 문자열 상수에
대한 이해
: 문자열 상수는 메모리 공간에 할당되면 주소를 반환한다.
char *str = "ABCDEFG"
- char형 포인터를 선언하고 있고, 대입연산자
오른쪽에 주소값이 오기를 기다린다.
- 하지만 주소값이 아닌 문자열 상수가 선언되어있다.
- 이는 문자열 상수는 메모리 공간에
저장되면, 그 순간에 문자열 상수의 주소 값이 반환됨을 말한다.
- 문자열 상수의 주소는 문자열의 첫 번째 문자의 주소이므로, char형
포인터 타입이다.
=> 문자열 상수 "ABCDEFG"가 0x10번지에 저장이 된다면,
주소값 0x10이 반환되어 포인터 변수 str을 초기화 하게 된다.
'C++프로그래밍' 카테고리의 다른 글
2013.11.14_ 상속(Inheritance) _ 예제 실습 (0) | 2013.11.14 |
---|---|
[2013.11.01] C++ _ 자료형과 연산자 (0) | 2013.11.01 |
2013.05.27_pragma pack() 에 대해서_팁 (0) | 2013.05.27 |
2013.05.22_ARM칩 Library에서 끌어쓰기 (0) | 2013.05.22 |
2013.05.20_Timer/Counter_AIC__풀업풀다운. (0) | 2013.05.20 |