문자형(char)
이번에는 자료형 중 하나인 문자형 char에 대해서 알아보겠다. 앞서 배웠듯이 문자형 char의 크기는
1byte = 8bit 정도이다.
char a; //선언
a = 'A'; //정의
cout << a; //출력
문자형(char)의 변수에 문자를 정의할때는 'A'와 같이 작은따옴표를 사용해주어야 한다.
반대로 문자열을 정의할때는 "문자열"과 같이 큰따옴표를 사용한다. 우리가 cout으로 문자열 출력할때 많이 봤을 것이다.
이 문자형(char)으로 출력할 수 있는 것은 같은 크기인 ASCII(아스키)코드밖에 없는데, 아스키코드를 일일히 외우기보다는 표를 보고 이 문자는 이렇다 정도만 알아두면 되겠다.
ASCII 코드표
위에 보이는 문자들은 모두 정수로 표현할 수 있는 문자들이다. 따라서 char형 변수에 해당하는 문자와 같은 정수를
정의하고 출력하면 문자로 바뀌는 것을 볼 수 있다.
이 아스키코드의 문자하나는 7bit + 1bit = 8bit의 크기를 가지고 있는데, 뒤에 1bit는 바로 널값(NULL)을 의미한다.
널값(NULL)이 무엇을 의미하는지는 이어서 바로 설명하겠다.
문자열(C 스타일) char
문자열은 말그대로 문자들을 여러개 붙여놓은 뜻인데, 그냥 변수가 아닌 배열에 넣어줄 수 있다.
그리고 문자열의 마지막에도 항상 널값(NULL)이 있는데, 이는 문자열의 끝을 나타내주기 위해서 항상 넣는다.
아스키코드에 없는 문자들은 2byte의 크기를 가지고 있는데, 그래서 1byte의 크기인 char형에 아스키코드 이외의 문자를
넣기 힘든 것이다.
예를들어 "안녕하세요"라는 문자열의 크기는 한글자당 2byte이므로 총10byte일것 같지만, 마지막에 NULL값(1byte)가
추가되어 총11byte의 크기인 문자열이 되는 것이다. 그래서 char 배열[11]의 크기에 넣을 수 있는 문자열이다.
♧와 같은 특수문자들은 바꿀수 없는 리터럴 문자들을 넣을때에는 그냥 '♧'같은 형식으로 할 수 없고, L'♧'로
정의해줘야 한다. 여기서 앞의 L은 리터럴 문자 / 상수임을 뜻하는 의미이다.
아스키코드에 없는 문자들을 넣기위해서는 배열만 있는 것이 아니라, wchar_t 자료형 또한 존재한다.
크기가 2byte이고 앞에 w는 와이드(wide)란 뜻으로, 좀 더 넓은 범위를 담아줄 수 있다.
wchar_t b; //선언
b = L'♧'; //정의
wchar형은 정의해줄때 앞에 L을 사용해야한다.
문자열(C++ 스타일 문자열) string
C++에서 문자열을 사용하기 전에 먼저 string헤더파일을 불러와야한다.
C++에서 문자열을 사용할때는 자료형 string을 사용하는데, 다음과 같이 사용하면 된다.
string str; //선언
str = "abfe"; //정의
cout << str; //출력
c 스타일 문자열과는 다르게 string은 배열없이도 알아서 문자열을 저장해준다.
따라서 그냥 char형에는 못담던 ♧도 string에는 담을 수 있다. string에도 wstring이 존재하는데, 자주 쓰이지는 않는다.
이것도 마찬가지로 정의할 때 앞에 L을 붙여주어야 가능하다.
구조체(struct)
구조체의 특징으로는 다른 자료형들을 묶어서 편하게 사용할 수 있다는 것이다.
//사용자 정의타입
struct DD7
{
//멤버 변수
string name;
int age;
};
위와 같이 선언해주면 된다. struct는 사용자 정의타입으로, 관리하기 편하게 자료형을 만든 것이다.
그리고 안에 선언한 변수들을 멤버 변수라고 불러준다.
한가지 유의사항으로 구조체의 이름을 지어줄 때, 첫글자에 숫자를 넣어줄 수 없다.
선언한 구조체를 main함수 안에서 사용하는 방법은 다음과 같다.
int main()
{
//선언
DD7 a;
DD7 b;
//정의
a.name = "홍길동";
a.age = 99;
// . : 멤버접근연산자
b.name = "철수"
b.age = "11";
//출력
cout << a.name << "\t" << a.age << endl;
cout << b.name << "\t" << b.age << endl;
}
선언한 구조체의 멤버변수에 접근하기 위해서는 멤버접근연산자 . 을 사용해주어야 한다.
예를들어 a.name은 구조체 a안의 string name 멤버변수에 접근해주는 역할을 하는 것이다.
만약 이 구조체로 배열을 만든다면, 각각의 모든 배열이 다 구조체의 멤버변수를 가지고 있는 특징이 있다.
위 사진처럼 구조체Trump로 만든 배열deck의 0번째와 1번째에 똑같은 멤버변수 shape, number가 있는 것을 알수있다.
'C++' 카테고리의 다른 글
C++ 배우기 10(2차원배열) (0) | 2022.10.25 |
---|---|
C++ 배우기 9(함수) (0) | 2022.10.24 |
C++ 배우기 8(enum, Switch) (0) | 2022.10.19 |
C++ 배우기 7(지시자break / continue, 형변환) (2) | 2022.10.18 |
C++ 배우기 6(이중for문, 스왑, 셔플) (0) | 2022.10.18 |