C,C++/[강의] 어소트락 C++ 17
-
반환할 것이 아무것도 없을 때 반환 타입으로 void를 쓴다.따라서 다른 자료형과 달리 void에서는 함수 종료 시 return을 해줄 필요가 없다. 이러한 void는 아래와 같이 포인터와 함께 사용되기도 한다.void* pVoid = nullptr; 포인터(*)앞에 붙는 자료형은 포인터 변수가 무언가를 가리킬 때 그 주소에 접근 할 때 사용할 자료의 단위를 말한다.이를 적용하면 void*의 경우 포인터가 붙었기 때문에 주소를 저장하는 포인터 변수는 맞지만,그 주소에 접근 할 때 원본의 형태를 어떻게 볼지를 정하지 않은 것이라고 할 수 있다. 원본의 형태를 정하지 않았기 때문에 아래의 예시처럼 어떤 변수의 주소든 다 받을 수 있다.// voidvoid* pVoid = nullptr;float* pFloa..
-
const// const int cint = 100; // 이 변수는 int 자료형으로 선언되었으나 const가 붙으며 상수화 되었다. // 상수화? => 값이 바뀔 수 없는 상태가 됨. // 이렇게 바뀔 수 없는 값을 r-value라고 한다. int ii = 10; // =를 기준으로 왼쪽에 있는 것이 변수, 오른쪽은 상수다. // 상수 = r-value, 바뀔 수 있는 값을 l-value라고 지칭함.cint = 100; // 상수인데도 int 변수를 잡았다는 것은 // 이것이 main 함수의 지역변수로서 존재하고 그 안에 1..
-
포인터 이해 확인 문제 풀이 1. 출력되는 값 iData의 값은 무엇이 될까?short sArr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int* pI = (int*)sArr;int iData = *((short*)(pI + 2));printf("1번 문제 정답 : %d\n", iData);먼저 short 타입은 2바이트 정수형이고, int 타입의 크기는 4바이트 정수형이라는 것을 생각해야 한다.첫 번째 줄 코드에 선언된 배열 내부는 이렇게 생겼을 것이다. 두 번째 줄의 다음 코드는 컴파일러 오류를 방지하기 위한 강제 캐스팅을 실행한다.int* pI = (int*)sArr;해당 코드를 실행하면 다음과 같이 int 포인터 변수 pI가 캐스팅에 의해short에서 int로 취급하는 ..
-
지난 시간에 배운 포인터 핵심 다시 되짚어보기#include #include int main(){ // 포인터 변수 // 자료형 변수명 int* pInt = nullptr; // 주소를 저장 char* pChar = nullptr; short* pShort = nullptr; // char* -> 주소를 따라가서 거기있는 데이터를 1byte짜리 정수형 자료로 해석함. // short* -> 주소를 따라가서 거기있는 데이터를 2byte짜리 정수형 자료로 해석함. // (실제로 어떤 값이 들어있는지는 포인터에게 중요치 않음. // 주소 안에 들어있는 값을 자료형이라고 생각하고 가져옴. // 따라서 정수 실수 구분이 잘못되면 제대로 작동하지..
-
컴퓨터와 메모리변수의 본질은 메모리이며, 모든 메모리는 자신의 위치를 식별하기 위한 근거로 고유번호를 가지는데, 이 번호를 메모리의 주소라고 한다. 이러한 메모리 주소는 보통 16진수로 표기한다.변수의 선언 및 정의는 메모리 확보를 의미하며 선언시 부여한 이름으로 확보한 메모리를 식별한다.변수를 이루는 세가지 요소1. 이름이 부여된 메모리2. 그 안에 담긴 정보3. 메모리의 주소단항 연산자인 주소 번지 연산자(=주소 연산자, &)를 사용하면 선택한 메모리의 주소를 가져올 수 있다.이를 %p 형식(주소 형식)으로 출력하면 16진수로 구성된 주소가 출력된다. 포인터 변수의 선언과 정의포인터 변수는 메모리의 주소를 저장하기 위한 전용 변수이다.모든 바이트 단위 메모리에는 고유번호(주소)가 붙어있다. 또한 이는..
-
visual studio의 내부 단위는 솔루션 -> 프로젝트파일(프로그램의 실체, 여러 개가 있을 수 있음) -> 그 외 서포팅을 위한 외부 라이브러리 등이 있다. 또한 디버그, 릴리즈 모드가 나눠져있으며 솔루션 플랫폼이 32비트(x86)용, 64비트 용이 존재한다. 지금은 64비트를 사용하는 것이 대중적이지만 32비트 기반 운영체제에서도 사용 가능하도록 비주얼 스튜디오가 빌드 기능을 지원하고 있다.대부분의 게임도 최저 사양으로 윈도우 64비트를 요구한다. 이는 게임의 사양이 높아졌기 때문이다. x86, x64는 OS의 데이터 처리 단위를 말한다. 그것이 작아지면 높은 사양의 게임을 실행할 때 메모리 문제가 발생한다. 따라서 32비트 운영체제에서는 PC 성능이 아무리 좋아도 높은 사양의 게임을 정상 실행..
-
정적 변수 - 키워드로 'static'을 사용한다.- 자기가 선언된 위치에서만 동작하는 변수이다.static int g_iStatic = 0;전역 변수의 경우 한 파일에 이미 선언된 이름을 다른 파일에서 똑같은 이름의 변수로 선언하려 하면 컴파일 단계에서는 문제가 없으나 같은 전역 변수의 이름으로 2개가 존재하기 때문에 링크 단계에서 문제가 생긴다.정적 변수는 전역 변수와 마찬가지로 데이터 영역을 사용한다. 하지만 두 변수에는 차이가 있다. 정적 변수의 경우 서로 다른 파일에서 같은 이름의 정적 변수를 2개 선언해도 빌드 과정에서 오류가 발생하지 않는다. 정적 변수는 선언되는 위치에 따라 동작에 차이가 있다. 하지만 정적 변수에 해당하는 static 키워드가 가지는 공통적인 의미는 변하지 않는다.sta..
-
헤더 파일을 분리하는 이유?(.h)헤더에 미리 함수나 변수를 선언해두고 실제 구현은 .cpp에서 하게 되면 .cpp에서는 이 헤더를 참조하여 헤더 안의 내용을 복사 붙여넣기해 사용한다. 이렇게 하면 미리 함수를 선언해둔 것과 같아진다. main 함수가 이 기능을 사용하고 싶을 때 .cpp에 아래처럼 include로 헤더를 참조해주면 헤더 파일 안의 함수를 호출할 수 있게 된다. 하지만 이때 main 함수의 입장에서는 이러한 함수가 있다는 것만 알고 안에 실제 기능은 알 수 없기 때문에, 결과적으로 호출한 함수가 func.cpp에 구현되어 있다는 것은 링크 단계에서 연결해주게 된다.▶ 결론 : 각각의 .h와 .cpp에 기능별로 나눠 구현하는 분할 구현을 통해 코드를 손쉽게 관리할 수 있다.#include ..