C++ 대망라 정리

OpenJR·2022년 5월 28일
0

자료형

정수형

char: 1바이트, 8비트, 256
short: 2바이트, 16비트, 65536
int: 4바이트, 32비트, 4294967296
long: 4바이트, 32비트, 4294967296
long long: 8바이트, 64비트, 1.844 * 10^19

실수형

float: 4바이트, 32비트
double: 8바이트, 64비트

변수

지역변수

int main() 문(함수) 안의 변수들

전역변수

int main() 문(함수) 밖의 변수들
데이터 영역을 사용
어디서나 사용 가능, 접근 가능, 변경 가능

정적변수

외부변수

메모리 영역

  1. 스택 영역
  2. 데이터 영역
    프로그램 시작 시 생성
    프로그램 종료 시 해제
  3. 읽기 전용 (코드, ROM)
  4. 힙 영역

함수

함수는 스택과 같이 작동한다.
main()이 먼저 호출되면 그 안의 함수들이 모두 끝나야 메인이 끝나기 때문이다.
함수가 사용되면 리턴하기 전까지 메모리를 잡아먹고, 리턴 후 메모리를 모두 반납한다.

연산자

대입 연산자

=

산술 연산자

+, -, *, /, %

증감 연산자

한 단계 증가나 감소로 이해해야 한다. 정수에서는 1이 증가하겠지만, 포인터에서는 다르게 작동한다.
앞쪽에 붙거나 뒤에 붙을 수도 있는데, 앞에 붙어야 더 빠르다. 연산 우선순위가 달라진다.
++: 1 증가
--: 1 감소

논리 연산자

논리형 자료형: bool, 1 byte
!: 역
&&: AND
||: OR
True: 0이 아닌 수 (1) 또는 참
False: 0 또는 거짓

비교 연산자

< , >, <=, >=, ==, !=

삼항 연산자

:?
i가 20이면 a는 5, 아니면 0

int a = 0;
int i = 10;
i == 20 ? a = 5 : a = 0;

비트 연산자

<<, >>: 쉬프트 연산자
1 바이트

a = 0 0 0 0 0 0 0 1
a <<= 1 // 2^n 배
a = 0 0 0 0 0 0 1 0
a >>= 2 // 2^n으로 나눈 몫
a = 0 0 0 0 1 0 0 0 

&, |, ^, ~: and, or, xor, not
게임 캐릭터의 상태를 unsigned int로 32가지의 상태를 정의 후 각종 상태를 비트 연산자로 변경해 줄 수 있다.

전처리기 매크로

#define x 1
#if
#ifdef
#endif

조건문

조건 내 변수가 고정 값이면 릴리즈 모드에서는 컴파일러가 최적화 하여 조건문을 없앨 수도 있다. 변수는 무조건 반응형으로 해야한다.

If / Else 구문

if 뒤 else 나 else if는 없어도 된다. if if 로 끊어서 쓸건지 if else if 로 구성할 것인지도 나중엔 고려해야한다 (위 오른쪽 동시에 누른다면?)

if (조건1) {
	명령어1
}
else if (조건2) {
	명령어2
}
else {
	명령어3
}

switch / case 구문

case 뒤에 break를 꼭 넣어줘야 한다. 안그러면 디폴트도 수행이 된다.

swith (변수)
{
case (변수의 조건1):
	명령어1
    break;
case (변수의 조건2):
	명령어2
    break;
default:
	명령어3
    break;
}

조건문

continue: 다음 반복으로 넘어간다.
break: 반복문을 빠져 나온다.
else: 반복문을 break를 거치지 않고 모두 돌았을 때, 명령 삽입

For 문

for(반복자 초기화; 반복 조건; 반복자 변경)
{
	반복 내용
}
for (auto i = 0; i < 100; ++i)
{
	반복 내용
}

While 문

변수 설정
while (변수 조건)
{
	반복
}

배열

int array[10] = { };
0으로 모두 초기화

int array[10] = { 1, 2, 3, 4};
4까지만 넣고 나머지 모두 0으로 초기화
  • 배열의 크기는 10개인데 값은 0으로 초기화
  • 인덱스 접근 가능, 변경 가능, 참고 가능
  • 메모리가 연속적이라 포인터 개념
  • 인덱스 접근시 포인터 접근처럼 주소로 접근하는 방식
  • 한번 크기 설정 시 크기 변경 불가

구조체

struct 구조체이름
{
	int a;
    double b;
};

초기화 방법

구조체 이름 s = {3, 2.05};
구조체 이름 s = { };

분할 구현

헤더파일과 cpp 파일을 구분
메인 함수 아래에 내가 메인 함수에서 쓰고자 하는 함수를 만들면 에러 발생
메인 함수 위에 정의만 해주면 에러 발생 안남
이러한 메커니즘으로 hpp에 함수를 단순히 정의를 하고, cpp에서 구현을 해놓으면,
메인함수가 있는 cpp에서 hpp을 include하면 함수가 복붙이 된것 같은 작용을 해서 메인함수 위에 함수가 정의가 되고, 링크 단계에서 사용하고자 하는 함수를 cpp에서 끌어다 줘서 사용이 가능해 진다.

포인터

주소의 단위는 1 바이트, 8 비트다.
포인터 변수의 자료형은 애초에 어떤 변수의 주소를 받을지 결정할때, 어떤 변수의 자료형과 같은 자료형을 받아야 한다.
즉, 정수형 변수의 주소를 포인터 변수로 받을땐, 그 포인터 변수의 자료형도 정수형이어야 한다.
그래야 포인터 변수 앞에 *를 사용해 접근할때 시작 위치부터 몇 바이트까지 접근할지 알아 정확히 접근이 가능해진다.

profile
Jacob

0개의 댓글