선행조건
Visual Studio Installer에서 수정버튼을 눌러서 스크롤을 내리면,
C++를 사용한 게임 개발이 있습니다. 이를 추가해주면 준비 끝입니다.
추가로 대부분은 높은 버전을 쓰는 관계로, 버전은 상관 없습니다.
Visual Studio를 켜게되면, 처음에 생성도 가능하며, 코드를 사용하지 않고 계속로 추후 생성도 가능합니다.
그러므로 코드를 사용하지 않고 계속으로 생성을 시작합니다.
이제 새로 만들기를 통해 빈 프로젝트를 생성합니다.
이 때 프로젝트 명과 솔루션 명이 있는데, 솔루션 즉 sln을 기준으로 Project가 구성되기 때문에, 이름이 중요하다고 생각합니다.
이제 프로젝트를 선택하고서, Ctrl + Shift + A를 통하여 추가할 수 있습니다. 혹은 추가 > 새 프로젝트로 추가합니다.
왼쪽은 1사이클만 하였을 때에 모습이고, 오른쪽은 글에 쓰여질 모든 프로젝트를 만든 형태입니다.
솔루션을 우클릭하고서, 파일 탐색기에 폴더 열기를 누르면, 파일 탐색기에서 만든 모습이 보입니다.
왼쪽 이미지를 보면 C01_Type이 좀 더 진한 모습입니다.
디버깅때 진한 것 즉 포커싱된 프로젝트를 기준으로 됩니다.
포커싱을 원하는 프로젝트에 우클릭 + a를 하면, 포커싱이 바뀌게 됩니다.
디버그하지 않고 시작 즉 Ctrl + F5를 누르면 실행됩니다.
Type
자료형들의 크기입니다.
int : 4byte
float : 4byte
char : 1byte
short : 2byte
long : 4byte
double : 8byte
간단하게 char는 2^8승 즉 256입니다. 256을 2로 나누면 128이 나오게 됩니다.
음수로 128 + 0 + 1 ~ 127을 모두 더하면 256 범위가 됩니다.
int는 정수형입니다.
float는 실수형이며 , 제 아무리 값을 크게 줘도 3.141592까지만 값이 정확합니다.
char의 경우는 문자를 넣습니다. 2진수값을 넣는 형태로도 가능합니다.
short의 경우 정수형이며, 2byte밖에 되지 않습니다.
double의 경우 .10f로 소수점 10자리까지 나오게하였으며 그 이하는 반올림 되어집니다.
short 즉 2byte값에서 최소값은 -32768이며 최대값은 32767입니다.
최소값 - 1을 주면 32767이되고,
최대값 +1을 주면 -32768이 됩니다.
밑으로 범위 초과시 언더플로우, 위로 초과시에는 오버플로우입니다.
A는 선언부 B는 정의부 C는 호출부입니다.
만일 선언부가 없이 main보다 밑에 존재한다면, B는 사용이 불가능합니다.
C언어는 어셈블리어와 유사합니다. 1대1대응이 거의 가능합니다.
그런 이유로 C#이나 JAVA는 고급언어에 해당하며, C언어는 저급언어에 해당합니다.
https://www.inflearn.com/blogs/201?srsltid=AfmBOooz5fm1qgiYdGrr-mY0wk4kVULxWLjUuzAWT6F5noFhx62AnJjg
그러다보니 C언어는 중간에 무언가를 추가할 수가 없습니다.
선언부가 위에 있어야 하는 이유는 이와같은 이유로 알고있지만, 추후 내용을 추가하겠습니다.
추가로 오른쪽의 경우는 정상적으로 작동합니다.
아니면 선언과 동시에 정의를 하는 방법도 있습니다. 결국 main의 위치가 중요한 것입니다.
Pointer
Pointer를 시작하기전 간단한 내용입니다.
c와 d를 바꾸고자 하였지만 당연히 바뀔리가 없습니다. 이는 c,d와 a,b와의 어떠한 관계도 없기 때문입니다.
그러므로 관계가 필요합니다.
int c = 10; 이 순간 c라는 주소가 만들어집니다.
printf("c = %d",c);를하면 c의 주소에 해당하는 값 즉 10을 출력하는 것입니다.
추가로 &c에 해당하는 주소를 다른 변수에 넘길 수 있습니다.
이는 a의 주소를 포인터b에 넘긴 것입니다. 물론 저대로 출력하면 주소가 나오게 됩니다.
값을 원하다면 포인터를 출력해야합니다.
이로써, 포인터는 주소가 가리킨 값이라는 느낌으로 이해가 가능합니다.
이를 통해서 주소값을 넘겨서 return 없이 값이 교체가 되는 것입니다.
Double Pointer
Double Pointer는 포인터의 포인터입니다.
a를 10으로 주고, 포인터 b에 a에 대한 주소를 넘깁니다.
그리고 포인터 2개붙은 c에 b를 넘기게 됩니다.
c를 하게되면 b의 주소값을 불러오게 됩니다.
*c를 하게되면 b안에 있는 값 즉 &a를 불러오는 것입니다.
**c를 하게되면 a안에 있는 값 즉 10을 불러오는 것입니다.
이로써 포인터끼리의 연관이 생기게 됩니다.
기존에는 이중배열정도의 개념을 생각하고 있었는데, 이제보니 많이 다를 지도 모르겠다는 생각이 들기 시작했습니다.
사소한 것
C언어에서 NULL은 define을 통해 0으로 정의되어 있다는 것을 실제로 확인해보니 신기했습니다.
감사합니다.
'학원' 카테고리의 다른 글
c - 2024-11-13 (1) | 2024.11.13 |
---|---|
c - 2024-11-05 (7) | 2024.11.05 |
55일차 - 2024-10-08 (0) | 2024.10.08 |
54일차 - 2024-10-04 (2) | 2024.10.04 |
53일차 - 2024-10-02 (0) | 2024.10.03 |