- 배열
선언 - typename Name [Size];
0부터 시작
배열의 이름은 수식에 사용시 자료형의 포인터 형으로 사용된다
자료형의 포인터 형으로 사용될 때 배열의 전체 주소가 아닌 첫번째 원소의 주소이다
이 때문에 배열과 배열의 대입이 이루어지지 않는다
그리고 여기에 얹어서 두가지 특징이 더 있는데
첫번째. 배열의 이름은값을 바꿀수 없는 상수(r-value)라는 점이다
두번째. [0]번째 데이터의 주소와 배열 전체를 의미하는 주소는 같다
- 문자열
연속되어 저장되어 있는 문자들
char text [10] = { 'a', 'b', 'c' }; // 는 a,b,c가 각 배열 인덱스에 복사되어 들어간다
char text [10] = "abc" // 는 abc가 한번에 들어간다
char text [ ] = "abc" // 가 되는 이유는 초기 값을 정해주었기 때문
상수표현 " ~ " -> 자료형이 const char *
문자열을 다룰때 끝을 알아야 그만큼 데이터를 사용할텐데 Null을 끝으로 인식하는 방법으로 사용한다
그렇기에 문자열상수( " ~ " )는 우리가 별도로 Null을 넣지 않아도 마지막에 Null이 자동으로 붙는다
그래서 Null이 붙은 크기가 고정되어야 문자열상수의 데이터를 온전히 사용할 수 있기 때문에
( " ~ " )는 const형이 붙어 문자열 상수라 한다
' ~ ' 와는 다를 수 밖에 없다
cout에서 char * 을 출력할때 다음주소를 한글자씩 출력하면서 Null을 찾는다
Null을 붙여주지 않아서 Null을 찾을때까지 출력하여 이상한 값이 나온다
char e = "a"; //불가능
char e = "abcd"; //불가능
char * e = "abcd"; //불가능
모두 대입하는 문자열 상수의 자료형[ const char * ]과 맞지 않다
마지막 불가능 코드는 "abcd"는 수정이 되지 않는 자료형인데 char * 은 수정이 가능한 자료형이다 그렇기에 대입 불가
입력 함수
cin = 화이트스페이스를 끝으로 간주 & 개행문자를 남김
※ 단 화이트스페이스, 개행문자가 제일 처음나오면 멀쩡한 문자가 나올때까지 무시
cin.get( ) = 개행문자를 끝으로 간주 & 개행문자를 남김
cin.getline( ) = 개행문자를 끝으로 간주 & 개행문자를 읽고 폐기
strcpy = 문자열 복사
strcat = 문자열 추가
strlen = 데이터형의 길이가 아닌 문자열의 길이 반환
- String
기존 C에서 Null 으로 마지막을 알아내는 방법과 달리
문자의 길이를 따로 저장하기에 Null관련 이슈가 없다
다만 실제로는 null로 끝나는 문자열과의 호환성을 위해 메모리상에 null을 포함하긴 한다
문자열 다루는 더 나은 방법의 클래스
들어오는 데이터에 따라 크기 자동 조절
배열처럼 인덱스 참조 가능
==, = , + , += 연산 가능
strncpy
strncat
.size( )
std::getline( ) - string용 getline
- raw 문자열
문자열 하나하나가 모두 독립적인 문자열 (특수문자까지도)
R"~( 로 시작해서
)~"로 끝나야한다
많은 도움이 된 글
https://blog.naver.com/tipsware/221018307213
'C++ > [책] C++ 기초 플러스' 카테고리의 다른 글
[ 203p ~ 209p ] 문자열 상수 (0) | 2021.06.30 |
---|---|
[ 179p ~ 203p ] 포인터, NULL&nullptr, New, Delete, 배열 포인터 (0) | 2021.06.28 |
[ 160p ~ 178p ] 구조체, 공용체, 열거체 (0) | 2021.06.03 |
[ 70p ~ 130p ] 식별자 규칙, 정수&실수, 멤버 연산자, const, static_cast, auto (0) | 2021.05.31 |
[0 ~ 70] 전처리기 , name space , 함수 선언 , 예약어/키워드 (0) | 2021.05.29 |