더듬이의 헬로월드

Hello, World!

728x90

프로그래밍 언어 32

[C++기본] 21.문자열-2

char의 크기가 1바이트라면, 한글은 어떻게 표현될까? char의 크기는 1바이트, 아스키 코드 기준 127개를 표현한다. 근데 생각해보면 한글을 조합하면 127은 거뜬히 넘어갈텐데, 어떻게 표현될까? 멀티바이트 방식의 문자 표현 char test[15]="abc한글123"; 'a' 'b' 'c' 와 '1' '2' '3' 은 1바이트, '한' '글' 은 2바이트가 할당되었다. 이처럼 상황에 따라서 할당되는 공간이 다르다면 멀티바이트 방식이라고 한다. 이는 현재 잘 쓰지 않고 있다. 호환성의 문제 떄문에 마이크로소프트의 윈도우에서 잔재되어있는 시스템. 표준으로 쓰이지 않는 방식이다. 와이드바이트 시스템, UNICODE 모든 문자를 2바이트로 표현하는 방식이다. 유니코드 문자셋을 사용하는 것이 많은 기기와..

[C++기본] 20.문자열-1

문자을 배열로 선언한다면? ⇒문자로 이루어진 배열 == 문자열 문자열의 초기화는 일반 배열과는 조금 다르다. int arr[10]={1,2,3,4,5,6}; 일반 배열은 이처럼 괄호 안에 넣어주었지만, char ch1 = 'a'; wchar_t ch2 = L'b'; char ch3[10] = "ABCDEFG"; wchar_t ch4[10] = L"ABCDEFG"; 문자열은 쌍따옴표 안에 적으면 된다! char은 1바이트, wchar_t는 2바이트의 공간을 차지한다. wchar_t를 이용하면 초기화시 L을 붙여야 한다. 어떻게 이게 가능할까? 다음과 같은 코드가 있다. const wchar_t* pchar=L"abcdef"; 주소값만 들어갈 수 있는 포인터 변수에 문자열이 들어갔다는 것은 어떤 의미를 가질..

[C++기본] 19.문자

대표적으로 4가지의 메모리영역을 다시 생각해보자 1.스택 영역 2.데이터 영역 3.힙 영역 4.ROM(코드)영역 문자 자료형 char char은 1바이트의 크기를 가지는 정수형 자료형이다. 문자형 자료형인데 왜 정수형으로 표현될까? ASCII CODE 바로 아스키 코드를 이용해 정수와 문자를 매칭 시키기 때문이다. 즉, 정수65는 char형 변수에서는 'A'라는 의미도 갖는 것이다. 컴퓨터에서 문자라는 의미는 지정된 정수와 매칭시켜주어 보여주는 것이라고 할수 있다. 원래는 정수형 변수이지만, 문자형으로 해석하는 순간 사용자에게는 문자 형태로 보여진다. int test1 = 1; //1이 대입된다. char test2 = '1'; //49가 대입된다 문자 '1' 과 숫자 1은 다르다. 문자의 끝 문자가 나..

[C++기본] 18.void 포인터

void Test(){ . . . . . . } 함수에서 리턴을 하지 않는 경우에는 void라는 키워드는 작성한다. void가 포인터와 만나면? void* pvoid=nullptr; 포인터 변수 앞의 자료형은 그 역참조의 단위를 나타낸다. 즉, int포인터라면 역참조시 int형으로 바라볼 것이다. 그럼 void는, 어떤 의미를 가지고 있을까? ⇒주소값을 가지는 포인터 변수이지만, 아직 어떤 방식으로 역참조를 할지는 정해지지 않았다는 뜻이 된다. void* vpointer=nullptr; int a = 0; float b = 0.5f; double c = 0.05; long long d = 50; vpointer = &a; vpointer = &b; vpointer = &c; vpointer = &d; 따..

[C++기본] 17.const와 포인터

포인터 변수는 주소를 가리키는 변수이다. 포인터 변수는 현재 자신이 가지고 있는 주소를 다른 주소로, 혹은 아무것도 가리키지 않도록 바꿀 수도 있고, 아니면 현재 주소가 가리키는 값을 수정할 수도 있다. const와 포인터가 만나면? 포인터 변수가 상수화가 된다면 두가지의 경우를 생각해볼 수 있다. 1.포인터가 가리키는 변수를 상수화 int a; int b; const int* pointer = &a; a = 400;//가능 pointer=&b;//가능 *pointer=500//불가능 cout

[C++기본] 16.const, 상수

변수와 상수 int value=500; const int value = 500; 위의 두 코드는 어떻게 다를까? 위의 value변수는 항상 값이 바뀔 수 있는 변수이지만, 자료형 앞에 const를 붙혀 선언한 변수는 값이 바뀌지 않는 상수로 취급된다. 여기서, 주의해야 할 점이 있다. const을 이용해 선언한 상수는 변수가 상수화 된 것이지, 처음부터 고정된 상수가 아니라는 점이다. const int value=500; value=300; 이는 컴파일러가 자동으로 문법적 오류를 잡아준다. 500=300; 과 같아져 버리기 때문이다. 그럼, const로 상수화된 변수의 값을 바꾸는 것은 정말 불가능 할까? ⇒const상수는 이후의 문법적으로 값을 바꾸지 못하게 막아주는 것이다. 주소로 접근해볼까? con..

[C++기본] 14.운영 체제와 포인터

솔루션, 프로젝트, 코드 비주얼 스튜디오는 솔루션, 솔루션 아래의 프로젝트, 프로젝트 아래의 코드들로 나뉜다. 기본 단위는 프로젝트로 계산한다. 현재 프로젝트의 도움을 주는 다른 프로젝트를 만들수도 있고, 또 다른 프로젝트를 만들 수도 있다. 플랫폼이란? -프로그램이 실행되는 기반, 안드로이드, IOS, Windows등 다양한 기능들이 세트로 모여있는 공간 -Windows 안에서도 실행 환경을 플랫폼이라고 부른다. -또한, 개발을 편하게 하기 위해 만들어진 개발플랫폼이라는 것도 존재한다. ⇒플랫폼은 다양한 기능을 제공하여 실행환경을 동일하게 만들어주는 공간을 의미한다. 32비트, 64비트 솔루션 빌드 비주얼 스튜디오는 어떤 운영체제, 즉 32비트 기반의 플랫폼인지, 64비트 기반의 플랫폼인지를 나누어서 ..

[C++기본] 13.정적 변수와 외부 변수

분할 컴파일과 전역 변수의 문제 모든 작업을 한 cpp 파일에서 작업하지 않는 이상 코드는 분할해서 작업하는 것이 대부분일 것이다. 이럴 경우 저번 포스팅에서 말했듯, 메모리 영역에 쌓이는 전역 변수의 이용에 조금 어려움이 있다. 정적 변수, static 서로 다른 파일에 같은 이름의 전역 변수를 쓰거나, 전역변수가 들어간 헤더를 여러 파일이 include 하게 되면 링크 과정에서 오류가 난다. ⇒이를 방지하기 위해 static 키워드와 함께 선언하는 정적 변수를 사용한다. 1번 파일 #include using namespace std; int DDE; int main(){} 2번파일 #include using namespace std; int DDE; int main(){} ⇒일반적인 전역 변수는 이런..

728x90