C 언어에서 문자열은 문자 배열로 취급된다. 문자열을 처리할 때 문자열 리터럴(예: "banana")은 기본적으로 문자열의 시작 주소를 가리키는 포인터로 사용된다.
포인터와 배열의 차이
1. 포인터 사용:여기서 my_string은 "banana" 문자열의 시작 주소를 가리키는 포인터이다. 문자열 리터럴은 읽기 전용 메모리에 저장되며, my_string은 그 메모리 위치를 가리킨다.
const char* my_string = "banana";
2. 배열 사용:여기서 my_string은 문자열 "banana"의 복사본을 배열로 가지고 있다. 이 경우 문자열은 읽기 전용 메모리에 저장된 것이 아니라, 배열 my_string에 복사된다.
const char my_string[] = "banana";
왜 포인터를 사용하는가?
- 효율성: 포인터를 사용하면 메모리 주소만 전달하므로, 메모리 사용량이 적고 더 빠르다. 문자열이 길어질수록 배열을 복사하는 것보다 포인터를 사용하는 것이 더 효율적이다.
- 문자열 리터럴의 특성: 문자열 리터럴은 변경할 수 없는 읽기 전용 메모리에 저장되므로, 이를 가리키는 포인터를 사용하는 것이 일반적이다.
예제 코드
아래는 문자열을 포인터로 사용하는 예제이다. my_string과 is_prefix가 문자열의 시작 주소를 가리키는 포인터이다.
#include <stdio.h>
#include <string.h>
int solution(const char* my_string, const char* is_prefix) {
size_t is_prefix_len = strlen(is_prefix);
if (strncmp(my_string, is_prefix, is_prefix_len) == 0) {
return 1; // 접두사인 경우
}
return 0; // 접두사가 아닌 경우
}
int main(void) {
const char* my_string = "banana";
const char* is_prefix = "ban";
int result = solution(my_string, is_prefix);
printf("%d\n", result); // 결과 출력
return 0;
}
'C 언어' 카테고리의 다른 글
scanf(%d\n, &a)가 틀린 이유 (0) | 2024.08.18 |
---|---|
고정 소수점과 부동 소수점 방식으로 소수 저장하기 (0) | 2024.08.16 |
2차원 배열 동적 할당하기 (0) | 2024.05.15 |
순열 알고리즘: C 프로그래밍에서의 구현 (1) | 2024.05.02 |
2차원 배열 동적 할당 시 해제 (0) | 2024.04.28 |