티스토리 뷰
■ 문자열 표현 방식의 이해
문자열을 표현하는 방식에는 크게 두 가지 방식이 있습니다. 하나는 변수로 표현하는 빙식이고, 또 다른 하나는 상수로 표현하는 방식입니다.
1
2
3
4
5 |
int main()
{
char str[6] = "Hello"; // 변수를 활용한 문자열 변수 표현
char *str2 = "Hello"; // 포인터를 활용한 문자열 상수 표현
} |
첫 번째는 char형인 str이라는 이름의 배열을 선언하고, 대입 연산자 오른쪽에 선언된 문자열을 할당하고 있습니다. 따라서 str이 저장하고 있는 문자열은 변수가 됩니다.
두 번째 str2는 char형 포인터를 선언하고, 오른쪽에는 "Hello"라는 문자열을 선언합니다. 이는 포인터 str2를 이용해서 문자열 상수 "Hello"를 가리키겠다는 의미가 됩니다. 따라사 str2는 문자열의 첫 문자 'H'를 가르키게 됩니다.
char *str2 = "Hello" 문장에서 str2에는 char형 주소 값이 할당 되는 것을 기대하지만 실제로는 "Hello"를 통해 할당을 하고 있습니다. 사실 문자열 상수는 메모리 공간에 저장이 되면 그 순간에 문자열 상수의 주소 값이 반환이 됩니다.
■ 똑같은 문자열을 선언하면 한번만 메모리 공간에 할당된다.
위 코드와 같이 선언된 문자열 상수가 두 개이므로 두 개의 주소값이 다를 것이라고 생각 할 수 있지만 아닙니다.
결과를 보면 str1의 주소 값과 str2의 주소 값이 서로 동일한 것을 확인 할 수 있습니다.
좋은 컴파일러는 똑같은 코드라 할지라도 메모리를 효율적으로 사용하기 위해서 최적화라는 과정을 거칩니다.
위의 코드에서 str1과 str2가 가리키는 문자열은 상수이면서, 문자열의 내용은 같습니다. 즉 상수이기 때문에 문자열의 내용은 변하지 않을 것이며 굳이 같은 내용을 다른 공간에 할당 할 필요가 없게 되는 것입니다.
'Programming > C언어' 카테고리의 다른 글
[C/C++] 함수 포인터에 대한 이해 (0) | 2017.10.07 |
---|---|
[C/C++] 포인터의 포인터(더블 포인터)의 이해 (2) | 2017.10.07 |
[C/C++] 포인터와 함수에 대한 이해 (1) | 2017.10.06 |
[C/C++] 포인터와 배열 (0) | 2017.10.03 |
[C/C++] 포인터에 대한 이해 (0) | 2017.10.02 |