전체 글 131

#30. 참조 기초

*참조(Reference) => 로우레벨(어셈블리) 관점에서 실제 작동 방식은 int* 와 똑같음. => C++ 관점에서는 number 라는 바구니에 또 다른 이름을 부여한 것 ( '별명' ) => 실제 어셈블리에서는 똑같이 동작함 => 주소마저도 똑같음. *그렇다면 참조는 왜 쓰는걸까 ?? 1. 포인터의 -> 불편하다. 2. 참조는 무조건 초기화 해주어야 함. 3. 주소를 마음대로 바꿀 수 없다. *매개변수 * 와 값 복사 방식 void CreateMonster(StatInfo* info) { info->hp = 100; info->attack = 8; info->defence = 5; } void CreateMonster(StatInfo info) { info.hp = 100; info.attack ..

프로그래밍/C++ 2022.07.19

#29. 포인터 연산

1. 주소 연산자 ( & ) => 해당 변수의 주소를 달라. int number = 1; int* ptr = &number; 2. 산술 연산자 ( +, - ) * : 포인터타입, (8바이트) int : 주소를 따라가면 int(4바이트 정수형 바구니) 가 있다고 가정!! += 1 : 다음 int(4바이트 정수형 바구니) 로 이동시켜줘!! => pointer += 1; => 포인터 연산 시, pointer 가 가리크는 주소값이 '포인터TYPE 크기' 만큼 한번 이동함. => short 면 2바이트, long long 이면 8바이트, int 면 4바이트 이동 (배열과 유사.) => 포인터를 담는 변수크기 와는 무관 3. 간접 연산자 => 포털을 타고 이동한다 생각해보자. number = 3; *pointer ..

프로그래밍/C++ 2022.07.19

#28. 포인터 기초

*포인터는 왜 필요한걸까 ?? => 스택 메모리에 쌓이는 지역변수를 통해 실제 데이터 값을 수정하기 위해서 => 원본 수정을 위해서. TPYE* 변수이름; int* ptr = &number; => 주소를 담는 바구니 *어셈블리 mov & lea mov : 값 이동 lea : 주소 이동 @int* 크기 => 8바이트 (64비트환경) / 4바이트 (32비트환경) *주소를 가지고 어떻게 동작시킬까 ?? int number = 1; int* ptr = &number; int value1 = *ptr; *ptr = 2; * TYPE 은 왜 붙여주는 걸까 ?? => 메모리에서 그 데이터의 크기만큼 읽기 위해서 => 포인터에 대한 추가정보 *타입의 불일치 __int64* ptr2 = (__int64*)&number;..

프로그래밍/C++ 2022.07.19

#27. 함수 기타 내용

*스택 메모리 동작 과정 *스택 프레임 *스택 오버플로우 *함수 호출규약 *오버로딩 ( 함수 이름의 재사용 ) => 매개변수 갯수가 다르거나 => 매개변수 타입이 다르거나 (순서가 다른걸 포함) *반환형식만 오버로딩 ?? => ( X ) int Add(int a, int b) { return a + b; } float Add(float a, float b) { return a + b; } float Add(int a, int b) => ERROR!! { return a + b; } => 함수의 반환 타입은 함수 오버로딩에서 고려하지 않음. *기본 인자값 void SetPlayerInfo(int hp, int mp, int attack, int guildId = 0, int castleId = 0) => ..

프로그래밍/C++ 2022.07.18

#24. 함수 호출 규약 ( Calling Convention )

* 함수 호출 규약 '함수를 호출할 때 파라미터를 어떤 식으로 전달하는지' 에 대한 규칙을 정의한다. @Caller ( 호출자 ) : 함수를 호출한 곳. @Callee ( 피호출자 ) : 호출 당하는 함수. => 속성 페이지 -> 고급 -> 호출 규칙 수정 가능. ( cdecl, stdcall, fastcall 모두 x86 환경에서 진행해야함. ) *cdecl => Caller ( 호출자 ) 에서 매개변수 처리. 호출자에서 매개변수를 push 로 스택에 저장한다. 그림에서 보는 것처럼 호출자에서 esp 위치를 더하며 매개변수를 처리하고 있다. 여기서 더한다는 의미는 현재 스택에 저장된 매개 변수 메모리 주소는 의미가 없기 때문에 더하면서 현재 메모리 위치 ( esp ) 를 옮긴다. ( stack 은 메모..

프로그래밍/C++ 2022.07.18

#23. #define & typedef & Rand & 열거형

*ifndef / endif #ifndef _PARAMS_HLSLI_ => ifndef => 이 부분이 define 되지 않았으면, #define _PARAMS_HLSLI_ => 아래부분을 추가해주세요. ... #endif => 헤더파일로 사용하겠다. *define ( 코드를 바꿔치기하는 개념 ) => 전처리기 #include => ( 이라는 파일을 찾아서 해당 내용을 복사해주세요.) => 빌드 순서 1. 전처리 ( 준비운동 ) srand 로 seed 값을 계속해서 바꾸어주어야 하는데 현재시간을 넣어서 계속해서 바뀔수 있도록 함. => 계속해서 누적해 나가는 시간 필요. => srand 를 사용하지 않으면 seed = 1 => 최초 1회만 선언 srand( time(0) ); // 시드 설정 rand()..

프로그래밍/C++ 2022.07.17

#22. 반복문

* do-while => 무조건 한번 은 do 영역를 실행시킴. *for 문 다양한 처리 int j = 0; for (;;) { ++j; if (j == 1000) break; } for (;; ++j) { if (j == 2000) break; } int i = 0; for( ; i < 10; ++i) { }​ 즉, for ( '1'; '2'; 3 ) 1,2,3 번 의 값들을 모두 비워도됨. 대신, 문법적으로 조건을 넣었다고 ';' 두 번으로 알려줘야함. for ( ; ; ) 본 내용은 인프런의 루키스님 강의를 듣고 정리한 내용입니다. 강의 듣기 !!

프로그래밍/C++ 2022.07.17