CS/C 22

20240110 C - 포인터와 메모리 관리

#include #include int main() { // 포인터(Pointer) int val = 10; int* pVal = &val; printf("val: %d (%p)\n", val, &val); printf("pVal: %d (%p)\n", *pVal, pVal); // *pVal 주소 안의 값 pVal 원래 값 (주소)(포인터 변수니까 주소가 저장되어 있음) printf("int* Size: %d Byte\n", sizeof(int*)); printf("double* Size: %d Byte\n", sizeof(double*)); float* pFloat = &val; printf("pFloat: %f (%p)\n", *pFloat, pFloat); //포인터가 가리키는 값의 타입과 포인터..

CS/C 2024.01.10

20240109 C - 구조체

#include typedef int HP; typedef struct _SStatus1 { double hp; int exp; char mp; char name; } SStatus1; typedef struct _SStatus { // 구조체 멤버 변수(Member Variables) // 구조체 패딩(padding) // 배열과 달리 건너 뛸 값이 일정하지 않아서 차라리 빈 메모리를 더해 4byte씩 맞춰서 받아온다. 근데 제일 큰 애 기준으로 패딩함 빠름 // char과 char은 1byte라 연달아 있으면 한 칸에 같이 들어있어서 4byte씩 같이 읽어온다. double이 있으면 8byte로 맞춘다 // 따라서 구조체를 만들 때는 4byte씩 나눠서 같이 정리하는 것이 아주 효율적이다 // 구조체..

CS/C 2024.01.10

20240109 C - 2차원 배열

#include void PrintArray2D(int _arr2d[][3]); // Literal Constant #define ROW_CNT 2 #define COL_CNT 5 int main() { //다차원 배열(Multidimensional Arrays) //int arr[행][열], row, column int arr2d[ROW_CNT][COL_CNT] = { { 11, 12, 13 }, { 21, 22, 23 } }; //2차원 배열을 초기화 할때는 열 정보는 반드시 있어야한다 초기화개수로 자동으로 만들어지지 않는다 //2차원 배열이여도 메모리에 저장되는 방식은 1차원배열과 같기 때문에 괄호 구분없이 숫자로만 초기화 해도 알아서 된다 for (int row = 0; row < ROW_CNT;..

CS/C 2024.01.10

20240105 C - 반복문

#include int main() { //// i(Index) //int i = 0, j = 0; //// for(초기문; 조건문; 증감문) //for ( i = 0, j = 7; i 6; ++i, j-=2 ) { // 시작과 끝나는 조건이 명확할 때 주로 사용. 조건이 여러개일 경우 하나만 충족해도 루프가 끝난다 //printf("i: %d j: %d\n", i, j); //} //for (i = 0; i < 3; ++i) { //for (j = 0; j < 2; ++j) { //printf("(%d %d)\n", i, j); //} //} ////while int i=0; //while (i < 5) { i가 5보다 작을 때 동안 while(1){ printf("while i : %..

CS/C 2024.01.08

20240108 C - 함수

#include //정적 라이브러리// dll 동적 라이브러리//다이렉트x 그래픽 라이브러리//함수 선언(Declaration) : .h 선언부를 모아둔 게 헤더파일//컴파일 속도를 줄이기 위해 선언부와 정의부를 따로 저장한다//컴파일 시간에는 헤더 파일만 포함됨//현재는 프리 컴파일(코딩 중 백그라운드에서 컴파일 진행되고 있음)로 속도 문제는 없음void PrintHello();// int Sum(매개 변수(Parameter));// 보통 외부에서 들어온 값이 매개변수 일 때 _를 붙임// 함수 정의부 내부에서 만들어져서 쓰이는 경우에는 _를 안붙임// 선언부에서 const int _lhs 했으면 정의부에서도 const 붙여줘야한다// 선언부에서 중요한건 리턴 타입, 함수명, 매개변수 타입과 개수//..

CS/C 2024.01.08

20240105 C - 변수

#include #define MAX_VAL 100 // 100이라는 숫자를 MAX_VAL이라는 이름으로도 사용할 수 있도록 '선언' // 치환 // 디버깅할때 안보임 그냥 숫자로 보임 그냥 const 변수 만들어서 쓰는게 나을 수도 있다 그런데 얘는 리터럴 상수라서 case에 쓸 수 있다 // 전역변수(Global Variables) // C나 C++에서만 유효 int g_var; // main 밖에 만들었기 때문에 다른 함수에서도 접근 가능 // 프로그램 시작될 때 메모리에 올라가고 끝날 때 내려간다 void ChangeVariavle() { //var = 100; g_var = 100; } int main() { // f9 브레이킹포인트 f10 한줄한줄 디버그 진행 // 변수(Variables) /..

CS/C 2024.01.05

20240104 C - 조건문

if ~ else 일관적이지 않은 조건에 좋음 성적, 성적, 성별, 나이 조건이 식 형태일때 switch ~ case 일관적인 조건에 좋음 성적, 성적, 성적, 성적 조건이 단순명확하게 딱 떨어질 때 case의 조건으로 리터럴 상수만 사용 가능, 실수는 사용 안됨 break를 사용하면 {} 지역 하나를 벗어난다 int sum = 0; switch (3){ default: break; case 1: sum+=1; case 3: sum+=1; case 5: sum+=1; case 6: sum+=1; } 위와 같은 방식으로 일부러 break를 사용하지 않는 경우도 있다. if문보다 효율적 자주 나오는 것들을 먼저 검사하도록 하는것이 좋다. pc는 그래도 괜찮지만 스위치는 메모리 아껴야하니까 완성해보고 순서 바..

CS/C 2024.01.05

20240103 C - 연산자

#include int main() { // lhs: Left Hand Side // rhs: Right Hand Side int lhs = 5; int rhs = 2; printf("lhs + rhs: %d\n", lhs + rhs); // -보다 +가 빠름 -연산은 +연산으로 바꿔서 연산 printf("lhs - rhs: %d\n", lhs - rhs); printf("lhs * rhs: %d\n", lhs * rhs); // /보다 *가 빠름 /연산은 *연산으로 바꿔서 연산 printf("lhs / rhs: %d\n", lhs / rhs); printf("lhs %% srhs: %d\n\n", lhs % rhs); printf("1+((3*2)/2.0f) Result: %f\n\n", 1+((3*2..

CS/C 2024.01.03
반응형