어떤 함수가 반화할 게 없을 경우에는 '무'라는 의도로 `void`를 사용한다. 이때 `void`라는 키워드는 `포인트`랑 섞일 때가 있다. 포인터(*) 앞에 자료형의 의미는 ? 포인터변수에 저장된 주소로 다시 갔을 때 원본의 형태를 어떤식으로 볼지를 정한다. `void* pVoid = nullptr;` : 자료형을 정하지 않은 포인터로 어떤 변수의 주소든지 다 받을 수 있다. void의 특징 1. 원본의 자료형을 정하지 않는다.2. 어떠한 타입을 가진 변수의 주소든 다 저장이 가능하다. 3. 역참조 불가능 (자기가 가리키고 있는 곳을 해석하는 자료형이 없기 때문) 4. 주소 연산 불가능 (+1을 할 때 몇 바이트 증가시켜야 하는지 모르기 때문) void* pVoid = nullptr;float* ..
constconst란 ? : 변동되지 않는 상수값으로, 변수 앞에 `const`라는 키워드를 붙이게 되면 해당 변수는 상수화가 된다. (즉, 값이 바뀔 수 없는 상태가 되었다는 것) r-value : 상수l-value : 변수 주의해야 할 점 상수화가 된 변수는 진짜 상수가 아니다. int 변수를 잡고 main쪽 스택 공간 안에 지역변수로서 존재하고 그 안에 100을 넣어둔 것이다. const를 붙이게 되면 상수로 취급해주기 때문에 값을 변경하려는 것은 문법적으로 오류임을 뜻한다. 하지만 변수 안에 있는 값이 진짜 상수처럼 아예 바뀔 수 없는 개념은 아니다. "주소"로 접근해서 강제로 바꿀 수 있음 참고할 점 컴파일러 입장에서는 문법적으로 봤을 때, cint라는 값을 100이라고 봤다. 그리고 co..
포인터 개념 포인터 변수란 ? 주소를 저장하는 변수를 말한다. 일반적으로 변수를 만들 때 어느 정도의 크기를 가지고 있는지, 무슨 용도로 쓰일 것인지를 나타내는 자료형을 선언한다. 이때 `자료형* 변수명`처럼 자료형 뒤에 *가 붙으면 이거는 "주소명을 저장하는 포인터 변수인데, 주소가 가르키고 있는 곳을 앞에서 선언한 자료형으로 본다"는 의미이다. 예를 들어 ` char* pChar = nullptr;`는 pChar 변수에 주소를 넣어주면 그 주소로 갔을 때 1byte 정수로 보겠다는 것이다. 여기서 진짜 어떤 형태로 되어있는지는 중요하지 않음! 반면 ` short* pShort = nullptr;`는 pShort 변수에 주소를 넣어주면 그 주소로 갔을 때 2byte 정수로 보겠다는 것이다. 만약 여기서..
단축키주석 처리 : `Ctrl + k -> c`주석 해제 : `Ctrl + k -> u`특정 부분 여러줄 선택 : `Alt + 드래그` 디버깅 시작 : `F5` 디버깅 멈춤 : `Shift + F5`중단점 생성 및 해제 : 원하는 곳에서 `F9` (해당 줄 실행 직전 멈춘다.) 디버깅 도중 구문 수행 : `F10` 또는 `F11`(더 낮은 단위의 수행) 만약 `int a = 100;`에서 `F10/F11`를 수행하면 실행 결과가 같지만, `int iData = Add(100, 200);`과 같이 함수에 들어가는 경우 다르다. 현재 위치가 14번째 줄이라면, 13번째 줄까지 실행한 결과를 보여준다. 디버깅 도중 구문 점프 : `F5` (다음 중단점까지 코드 실행됨) 디버깅로컬 창 : 현재 중단점이 ..
분할구현을 설명하기에 앞서, 만약 main() 함수 밖에 Test()라는 함수를 선언하면, main() 함수 내에서 이를 사용할 수 있다. 이때 선언되는 위치가 매우매우 중요한데 Test() 함수를 main() 함수 뒤에 선언하면 "컴파일 오류"(문법적 오류)가 발생한다. 이때 누군가가 '나는 main() 함수를 위에서 보고 싶어!' 라고 했을 때 함수를 뒤에 구현해도 오류가 발생하지 않는 방법은 없을까 ?-> 있지요. 바로 Test() 함수를 main() 함수 위에서 "선언만" 해놓고 main() 함수 뒤에 구현하는 것이다. 단, 여기서 주의해야 할 점은 main() 함수 뒤에서 구현도 하지 않는다면 컴파일 오류는 발생하지 않지만 "링크 단계"에서 오류가 발생하니 주의하자. (링크 단계란, 쉽게 말해 ..
변수의 종류 지역변수 int main(){ int g_iLocal = 100; return 0;}1) 정의 스택 영역에 저장되는 변수 (즉, main(), Test(), ... 함수 안에서 선언된 변수)함수 내에서 선언되어 해당 함수에서만 사용할 수 있는 변수 2) 특징 main() 함수 내에서 `int i = 0;`을 정의했다면 Test() 함수에서 사용이 불가하다. 하지만 Test() 함수에서 `int i = 0;`를 정의해도 오류가 발생하지 않으며 다른 역할로 사용할 수 있다. 함수가 반환/종료되면 메모리에서 사라진다. 전역변수 int g_iGlobal = 100;int main(){ return 0;}1) 정의 데이터 영역에 저장되는 변수 (즉, main() 함수 밖에서 선언된 변수) 해당 파..
구조체란 ? "사용자 정의 자료형"을 말한다. int, float, char 등 이미 정의되어 있는 자료형을 사용할 수도 있지만 여러 가지 자료형이 합쳐진 나만의 자료형을 만들어 사용할 수도 있다. 선언 방식과 사용법은 아래 코드와 같다. typedef : type을 재정의한다. struct : 구조체를 선언한다. typedef struct _tagMyST{ int a; float f;}MYST;typedef struct _tagBig{ MYST k; int i; char c;}BIG;int main(){ MYST t = {100, 3.14f}; //8byte t.a = 10; //값 변경도 가능 t.f = 10.2312f; int iSize =..
(작성중) int iArray[10] = { };iArray[4] = 10;길이 10을 가진 빈 배열을 선언한다. 즉, int형 변수 10개를 한번에 배열로 선언해 메모리 상에 4byte짜리 int가 연속적으로 메모리 구조가 잡혀있다. { }가 비어있으면 0으로 초기화된다. 인덱스4 (다섯번째 자리)에 10을 넣는다. 여기서 주의할 점은!! 인덱스 접근을 잘못하면 다른 변수 값에 침범할 수도 있다. 예를 들어 `iArray[12] = 10;`이라고 한다면 오류가 나지 않고 앞에서 선언한 iValue의 값이 10으로 바뀔 수 있으므로 무조건 주의할 것
반복문종류`for (반복자 초기화 ; 반복자 조건 체크 ; 반복자 변경)` 반복자 초기화 -> `while (반복자 조건 체크)` -> 반복자 변경탈출 `continue` : 아래 부분 수행하지 않고 변경파트로 바로 넘어가기 `break` : 반복문 끝내기for (int i = 0; i int i = 0;while (i 함수기본함수함수의 수행 순서는 스택 자료구조와 비슷하다. 후입선출 방식으로 가장 나중에 호출된 함수가 가장 먼저 종료된다. 따라서 함수들이 사용하는 메모리 영역을 "스택 메모리 영역"이라고도 부른다. 또한 main 함수가 생성되는 순간 정의된 변수를 바탕으로 메모리를 얼만큼 쓸지 미리 알고 잡아둔다. 단, 코드 명령어와 메모리 공간은 다르다 !! (main 함수 안에 또 다른 ..
#include //1. printf : 콘솔창에 출력한다.printf("abcdef %d \n", 10); //정수printf("abcedf %f \n", 3.14); //실수//2. scanf : 콘솔창으로부터 입력 받는다. int iInput = 0;scanf_s("%d", &iInput);
