• 배열

선언 - typename Name [Size];

 

0부터 시작

 

 

배열의 이름은 수식에 사용시 자료형의 포인터 형으로 사용된다

자료형의 포인터 형으로 사용될 때 배열의 전체 주소가 아닌 첫번째 원소의 주소이다

arr1에 마우스를 가저다 대면 나오는 창, int* 라고 한다

 

이 때문에 배열과 배열의 대입이 이루어지지 않는다

 

그리고 여기에 얹어서 두가지 특징이 더 있는데

 

첫번째. 배열의 이름은값을 바꿀수 없는 상수(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 언어 관련 전체 목차 : http://blog.naver.com/tipsware/221010831969 1. 배열로 선언된 변수의 초기화 ...

blog.naver.com

 

+ Recent posts