득이공간

[C++ 문법 정리] 1. C++ 기초 본문

PS/C++

[C++ 문법 정리] 1. C++ 기초

쟁득 2024. 2. 3. 22:50
해당 게시물은 쥬신게임아카데미의 '1개월차 C++' 강의를 수강하며
학습한 내용을 개인적으로 정리한 글입니다.

📌 목차 - 1. C++ 기초

1. 변수
2. 자료형
3. 연산자
4. 분기문
5. 반복문
6. 난수
7. n진수
8. 함수
9. 메모리영역

10. 포인터
11. 이중포인터
12. 1차원정적배열
13. 2차원정적배열
14. 문자열
15. 구조체
16. 공용체, 열거체
17. 동적할당
18. 입출력스트림버퍼, 경로
19. 파일입출력, 메모리함수

20. 함수포인터, 재귀함수
21. 레퍼런스, 매크로
22. 조건부컴파일, 파일분할
23. string


📌 1. 변수

O: 한글, _로시작
X: 띄어쓰기, 숫자로시작, _$제외한특수문자, 사용되는키워드


📌 2. 자료형

종류: 정수, 실수, 문자, 논리
1byte: char, bool
2byte: short
4byte: int, long, float
8byte: long long, double, long double
signed: 부호O
unsigned: 부호X
양수->음수: 1의보수(비트반전) -> 2의보수(+1)
부동소수점: 소수점이 움직이므로 풍부하게 표현 가능하다. 하지만 오차가 발생할 수 있다.
리터럴 상수: 임시 메모리에 담김. 실수는 8byte(double) 임시메모리를 만든다. 그래서 f를 붙이면 float로 만들기 가능하다.
const: 변수의 상수화


📌 3. 연산자

종류: 대입, 산술, sizeof, 대소비교, 논리, 축약, 비트단위, 쉬프트, 증감
대입: =
산술: +, -, *, /(0으로 나누지 마삼), %(정수만 가능)
sizeof: 메모리크기 반환
논리: &&, ||, !
축약: +=, -=, *=, /=
비트단위: &, |, ~, ^
쉬프트: <<, >>
증감: ++, --


📌 4. 분기문

종류: if, switch, goto


📌 5. 반복문

종류: while, do while, for
continue: 밑의 코드를 건너뛰고 반복문의 조건식으로 돌아감


📌 6. 난수

rand(): 시드표 내의 수 하나를 반환하는 함수
srand(): 현재 rand 함수가 참조하고 있는 시드표를 바꿔줄 수 있다.
time(): srand(unsigned(time(NULL))); // 시간에 따라 시드표를 변경해줌 //#include <time.h>


📌 7. n진수

8진수: 0으로 시작, 숫자 하나에 3비트
16진수: 0x로 시작, 숫자 하나에 4비트


📌 8. 함수

오버로딩: 함수의 이름이 같다. parameter의 갯수 or 타입이 다르다.
디폴트parameter: 선언부에서 사용가능, 오른쪽에서부터 parameter에 디폴트 값을 넣어줄 수 있다.


📌 9. 메모리영역

종류: code, data, stack, heap (램 메인 메모리)
code: 함수, 명령어
data: 전역변수, 정적변수, 문자열상수
stack: 지역변수
heap: 동적할당된데이터


📌 10. 포인터

변수의 주소값을 담는 변수
*: 에스크리터 연산자
&: 어드레스 연산자
*: 역참조 연산자
4byte: 32bit체제, char*, bool*, short*, int*, long*, float*, long long*, double*, long double*
8byte: 64bit체제, char*, bool*, short*, int*, long*, float*, long long*, double*, long double*
const int* ptr = &iA; //알맹이 고정
int* const ptr = &iA; //주소값 고정


📌 11. 이중포인터

포인터의 주소값을 담는 변수
에스크리터와 역참조 연산자는 1:1 비율로 작동
역참조 연산자를 한 번 사용하면 에스크리터를 하나 제거한 자료형이 결과로 나온다.


📌 12. 1차원정적배열

ex) int iArr[5] = {};
배열을 선언할 때 크기는 반드시 상수로 적용해야한다.
배열의 이름은 배열의 첫 번째 원소를 가리키는 상수 포인터이다.
*(iArr + 1) == iArr[1]
함수에서의 매개변수 표현: int* ptr == int iArr[]


📌 13. 2차원정적배열

ex) int iArr[2][5] = { {}, {} };
= {{1,2,3,4,5},{6,7,8,9,10}};
ex) int (*iArr)[2];
sizeof연산: sizeof(iArr)-배열, sizeof(iArr[0])-행, sizeof(iArr[0][0])-원소
*(*(iArr + 1) + 1) == *(*iArr + 6) == (*(iArr + 1))[1] == *(iArr[1] + 1) == iArr[1][1]


📌 14. 문자열

ex) char szName[64] = "jusin"; //초기화할 때만 가능
ex) char* pName = "jusin"; //문자열 상수는 못바꿈
함수: strlen(str1), strcmp(str1,str2), strcpy_s(Dstr1,Sstr2), strcat_s(Dstr1, Sstr2)


📌 15. 구조체

크기: 구조체 내의 크기가 가장 큰 기본자료형 단위로 메모리 공간 생성.


📌 16. 공용체, 열거체

공용체(union): 어려개의 변수가 하나의 메모리를 공동으로 사용한다.
열거체(enum): 정수값이 순서대로 부여된다.


📌 17. 동적할당

c함수(기본,배열): malloc / free
c함수(배열): calloc / free
c++함수: new / delete
동적할당은 사용자가 원하는 시점에 할당, 해제를 하는 행위이다.


📌 18. 입출력스트림버퍼, 경로

입력: 프로그램이 외부로부터 데이터를 얻어온다.
출력: 프로그램이 외부로 데이터를 내보낸다.
스트림: 가상의 통로
표준스트림: stdin:키보드, stdout:모니터, stderr:모니터
버퍼: 스트림 중간에 있는 메모리 블록
EOF: 파일의 끝을 표현하는 정수 == -1
절대경로, 상대경로


📌 19. 파일입출력, 메모리함수

fopen_s(&stream, “”, “”);
fclose(stream);

memset(*des, value, size);
memcpy(*des, *start, size);
memmove(*des, *start, size);


📌 20. 함수포인터, 재귀함수

함수포인터: 함수의 이름 또한 포인터이다.
재귀함수: 자기 자신을 다시 호출하는 함수. 탈출 조건이 필수.


📌 21. 레퍼런스, 매크로

레퍼런스: 원본 데이터에 새로운 별명을 부여해서 사용한다. (포인터-간접/레퍼런스-직접)
매크로: 단순 치환, 전처리 단계에서 단순 치환 시켜놓겠다는 뜻이다.
매크로 상수: 컴파일 시점에 매크로 이름이 작성되어있는 코드를 정의해놓은 상수로 단순 치환한다.
매크로 함수: 매크로를 함수처럼 사용한다.
(속도 빠름 / 복잡한 코드구성 불리, 디버깅 불가능)


📌 22. 조건부컴파일, 파일분할

조건부컴파일: 전처리 단계에서 컴파일 수행 여부를 결정한다.
파일분할: 여러 파일을 만들어서 작업한다.


📌 23. string

문자를 더욱 쉽게 다룰 수 있도록 추가된 자료형