[C] 문자열과 포인터
지난번에 배웠듯 C에서 문자열을 표현할 때는 char타입의 배열을 사용해 마지막에 null (\0)문자를 붙이는 것으로 표현할 수 있다.
그런데 포인터 변수로도 배열을 표현할 수 있다면, 문자열도 포인터 변수로 표현할 수 있지 않을까?
표현할 수 있다.
하지만 첫 번째 방법과 두 번째 방법은 차이점이 있다.
char * s1 = "your team"; 처럼 포인터 변수를 사용해 문자열을 표현하면, 문자열을 새로 할당하는 것도 가능하고, 문자열이 아니라 char의 주소를 할당하는 것도 가능하지만, 문자열의 일부분을 인덱스를 통해 변경하려고 하면 오류가 발생한다.
이는 자동 할당된 문자열에 대한 규칙으로 받아들여야 한다.
char타입의 배열로 문자열을 선언하게 되면 아까와는 반대되는 상황이 발생한다.
배열 이름은 지정 연산 왼쪽에 올 수 없어 배열에 문자열을 할당하는 건 불가능하지만, 배열의 인덱스를 통해 값을 조작하는건 가능하다.
자동 할당 문자열에 대해 좀 더 알아보자.
char배열을 통해 문자열을 선언하는 경우 외의 모든 경우를 자동 할당 문자열로 취급한다.
위의 예시를 보면, 문자열이 먼저 할당된 다음 문자열이 할당된 위치의 주소 값을 반환한다.
포인터 배열
배열에다가 각 요소들의 주소를 저장하는, 즉 포인터의 배열을 사용하게 되는 경우도 있다.
이 때 주소의 크기는 4바이트로 설정하고, 저장할 때는 &연산자로 요소의 주소를 저장한다.
읽어올 때는 *연산자로 주소의 값을 읽어온다.
포인터 배열은 문자열을 배열로 묶어서 처리할 때 사용된다.
char * arr[3] = {"abc","def"};
printf("%s", arr[0]); // abc
printf("%s", arr[1]); // def
문자열의 시작 주소를 가지고 있으면 문자열을 가지고 있다고 볼 수 있으니..
char[] = "Hello";
char * p[] {a, a+1, a+2}; // "Hello", "ello", "llo" . 문자열의 끝은 \0 널문자가 알려주니까.
문자열을 복사하는 함수로 strcpy가 있다. (string copy)
char * strcpy(char * s1, const char *s2){
char *s = s1;
while(*s++ = *s2++);
return s1;
}
'Programming Language > C' 카테고리의 다른 글
[C] Call By Value (0) | 2022.04.13 |
---|---|
[C] 포인터와 함수 (0) | 2022.04.13 |
[C] 포인터 연산 (0) | 2022.04.01 |
[C] 배열과 포인터 (0) | 2022.04.01 |
[C] 포인터 (0) | 2022.03.28 |
댓글
이 글 공유하기
다른 글
-
[C] Call By Value
[C] Call By Value
2022.04.13 -
[C] 포인터와 함수
[C] 포인터와 함수
2022.04.13 -
[C] 포인터 연산
[C] 포인터 연산
2022.04.01 -
[C] 배열과 포인터
[C] 배열과 포인터
2022.04.01