C++에서 문자열은 문자 배열로 표현됩니다. 포인터를 사용하면 문자열을 효율적으로 다룰 수 있습니다. 이번 포스트에서는 포인터와 문자열의 관계를 다양한 예제와 함께 살펴보겠습니다.
#pragma warning(disable: 4996)
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
// 첫 번째 블록: 문자 배열과 포인터
{
// 문자 배열 선언 및 초기화
char str0[] = "abcd"; // 문자 배열 str0을 선언하고 "abcd"로 초기화
char* str1 = str0; // 포인터 str1을 선언하고 str0의 주소를 저장
// str0과 str1 출력 (둘 다 "abcd"를 출력)
cout << str0 << endl; // "abcd" 출력
cout << str1 << endl; // "abcd" 출력
}
// 두 번째 블록: 문자열 리터럴
{
// 문자열 리터럴을 가리키는 포인터 선언
const char* str2 = "hello"; // 문자열 리터럴 "hello"를 가리키는 포인터 str2 선언
cout << str2 << endl; // "hello" 출력
// 문자열 리터럴의 타입 출력
cout << typeid("hello").name() << endl; // 문자열 리터럴의 타입 정보 출력 (const char[6])
}
// 세 번째 블록: 문자열 함수 사용 예제
{
char str0[100] = "abcd"; // 크기가 100인 문자 배열 str0을 선언하고 "abcd"로 초기화
char* str1 = str0; // 포인터 str1을 선언하고 str0의 주소를 저장
const char* str2 = "hello"; // 문자열 리터럴 "hello"를 가리키는 포인터 str2 선언
// 문자열의 길이 출력
cout << strlen(str2) << endl; // str2가 가리키는 문자열의 길이 출력 (5)
// 문자열 복사
strcpy(str0, str2); // str2가 가리키는 문자열을 str0에 복사
cout << str0 << endl; // "hello" 출력 (str0의 내용이 "hello"로 변경됨)
// 문자열 비교
cout << strcmp(str0, str2) << endl; // str0과 str2의 문자열을 비교 (같으면 0 출력)
}
return 0;
}
첫 번째 블록에서는 문자 배열을 포인터로 가리키는 방법을 보여줍니다.
{
char str0[] = "abcd"; // 문자 배열 str0을 선언하고 "abcd"로 초기화
char* str1 = str0; // 포인터 str1을 선언하고 str0의 주소를 저장
cout << str0 << endl; // "abcd" 출력
cout << str1 << endl; // "abcd" 출력
}
위 코드에서는 str0
은 문자 배열이고, str1
은 str0
의 첫 번째 요소를 가리키는 포인터입니다. 두 변수 모두 동일한 문자열 "abcd"를 출력합니다.
두 번째 블록에서는 문자열 리터럴을 가리키는 포인터를 다룹니다.
{
const char* str2 = "hello"; // 문자열 리터럴 "hello"를 가리키는 포인터 str2 선언
cout << str2 << endl; // "hello" 출력
cout << typeid("hello").name() << endl; // 문자열 리터럴의 타입 정보 출력 (const char[6])
}
여기서 str2
는 문자열 리터럴 "hello"를 가리키는 포인터입니다. typeid
를 사용하여 문자열 리터럴의 타입 정보를 확인할 수 있습니다.
세 번째 블록에서는 문자열 함수(strlen
, strcpy
, strcmp
)를 사용하여 문자열을 처리하는 방법을 보여줍니다.
{
char str0[100] = "abcd"; // 크기가 100인 문자 배열 str0을 선언하고 "abcd"로 초기화
char* str1 = str0; // 포인터 str1을 선언하고 str0의 주소를 저장
const char* str2 = "hello"; // 문자열 리터럴 "hello"를 가리키는 포인터 str2 선언
cout << strlen(str2) << endl; // str2가 가리키는 문자열의 길이 출력 (5)
strcpy(str0, str2); // str2가 가리키는 문자열을 str0에 복사
cout << str0 << endl; // "hello" 출력 (str0의 내용이 "hello"로 변경됨)
cout << strcmp(str0, str2) << endl; // str0과 str2의 문자열을 비교 (같으면 0 출력)
}
strlen(str2)
는 str2
가 가리키는 문자열의 길이를 반환합니다.strcpy(str0, str2)
는 str2
가 가리키는 문자열을 str0
에 복사합니다.strcmp(str0, str2)
는 str0
과 str2
의 문자열을 비교하여 같으면 0을 반환합니다.포인터와 문자열은 C++에서 매우 중요한 개념입니다. 문자열은 문자 배열로 표현되며, 포인터를 사용하여 효율적으로 다룰 수 있습니다. 이번 포스트에서는 포인터와 문자열의 기본 개념과 다양한 사용법을 예제를 통해 살펴보았습니다. 포인터와 문자열의 관계를 잘 이해하고 활용하면 문자열 처리와 메모리 관리를 더욱 효율적으로 할 수 있습니다. 반복해서 연습하고 실습해보세요!