본문 바로가기

BackEnd/C

문자열 배열과 문자열을 참조하는 포인터

반응형

C언어에서 문자열을 표현하는 방식은 2가지로 나뉜다. 


하나는 변수 형태로 표현하는 방식이고, 또 하나는 상수 형태로 표현하는 방식이다.



1. 변수 형태의 문자열


배열을 선언하면서 문자열을 초기화 하면, 배열에는 문자열이 저장된다.


char vStr[30] = "String Variable";


문자열이 다른 어딘가에 저장되는 것이 아니다. 


그냥 배열에 저장될 뿐이고, char형 배열을 통해서 문자열을 참조한다.


https://cg-developer.tistory.com/179 참고하자



2. 상수 형태의 문자열


포인터를 이용해서 상수 형태의 문자열을 참조하는것도 가능하다.


char * cStr = "String Variable";


이렇게 선언하면 문자열은 상수의 형태로 메모리 공간에 자동으로 저장된다. 


https://cg-developer.tistory.com/179 마찬가지로 참고하자


단 상수의 형태로 저장이 되면 변경이 불가능한 문자열이 만들어지고, 문자열의 시작 주소가 반환된다.


char * cStr = 0x12;


포인터 변수라는것은 주소값 하나를 저장하는 변수이다. 그렇기 때문에 char형 포인터 변수에 문자


열의 시작 주소 0x12하나를 저장하는 것은 적절한 대처이다.


1
2
3
4
5
6
7
8
9
10
int main(void)
{
    char * str1="Computer Systems";
    char * str2="Operating Systems";
 
    printf("%s\n", str1);
    printf("%s\n", str2);
 
    return 0;
}
cs


1
2
Computer Systems
Operating Systems
cs


3. 문자열이 상수라는 증거 제시


문자열이 상수 형태로 선언되었다는 것은 저장된 문자열의 내용이 변경되지 않는다는 뜻이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
int main(void)
{
    char vStr[30]="String Variable";
    char * cStr="String Constant";
 
    vStr[0]='Q';
    printf("%s\n", vStr);
 
    *cStr='Q';
    printf("%s\n", cStr);
 
    return 0;
}
cs

1
Qtring Variable
cs


3,4행 각각 문자열을 변수의형태로, 상수의 형태로 선언했다.


6행 변수 형태로 선언된 문자열의 첫문자를 변경하고 있다. 문자열 자체가 배열에 저장된 변수이니 당연히 변경된다.


9행의 코드는 상수 형태의 문자열에 변경을 가하는것이다. 이부분은 컴파일이 되지 않는다.


*cStr='Q'; 에서 *cStr은 변수가 아닌 상수 "String Constant" 를 의미한다.


"String Constant" = 'Q' 


위처럼 상수에 상수를 대입할수 없다.


반응형

'BackEnd > C' 카테고리의 다른 글

포인터 배열  (0) 2019.03.13
포인터의 포인터  (0) 2019.03.13
&연산자가 반환하는것은?  (0) 2019.03.12
잘못된 포인터 사용의 예와 NULL 포인터  (0) 2019.03.12
포인터 형과 *연산자  (0) 2019.03.12