다음과 같이 포인터를 기반으로 문자열을 선언하는 것이 가능하다.
char *str = "My String";
이렇게 선언을 하면 메모리 공간에 "My String"이 저장되고, 문자열의 첫 번째 문자 M의 주소 값이 반환되어 포인터 변수 str에 저장된다. 배열로 선언한 문자열의 경우 계속해서 그 문자열을 가리키지만, 포인터로 선언한 문자열은 다음과 같이 다른 위치를 가리키도록 할 수 있다.
int main(void)
{
char *str = "My String";
str = "Your String"; // str이 가리키는 대상을 변경
}
배열로 선언된 문자열은 값의 변경이 가능하기 때문에 변수 형태의 문자열 이라 하고, 포인터로 선언된 문자열은 값이 변경이 불가능하여 상수 형태의 문자열 이라 한다.
#include <stdio.h>
int main(void)
{
char str1[] = "My String";
char *str2 = "Your String";
printf("%s %s\n", str1, str2);
str2 = "Our String"; // 가리키는 대상 변경
printf("%s %s\n", str1, str2);
str1[0] = 'X'; // 정상적으로 변경됨
//str2[0] = 'X'; // 컴파일에서 에러 발생
printf("%s %s\n", str1, str2);
return 0;
}
위 코드와 같이 포인터로 선언한 문자열의 값을 변경하려 할때 컴파일이 정상적으로 안되는것을 확인할 수 있다.
'Language > C, C++' 카테고리의 다른 글
[C] 함수 인자로 배열 전달 (0) | 2020.12.20 |
---|---|
[C] 포인터 배열 (0) | 2020.12.19 |
[C] 포인터 연산 (0) | 2020.12.17 |
[C] 포인터와 배열 (0) | 2020.12.17 |
[C] 포인터 변수 (0) | 2020.12.16 |