목록Develop/C++ (80)
오븐 노트
#include using namespace std; void Test(int a) { a++; } // 배열을 함수 인자로 넘기면, 컴파일러가 알아서 포인터로 치환함 (char[] -> char*) // 즉 배열의 내용 전체를 넘긴게 아니라, 시작 주소(포인터)만 넘긴 것 // 주소값을 이용하여 원본을 수정함 void Test(char a[]) { a[0] = 'x'; } int main() { // .data 주소[H][e][l][l][o][][W][o][r][l][d][\0] // test1[주소]
#include using namespace std; struct StatInfo { int hp; int attack; int defence; }; int main() { // 배열의 크기는 상수여야 함 (VC 컴파일러 기준) const int monsterCount = 10; StatInfo monsters[monsterCount]; // 배열의 이름은 곧 배열의 시작 위치를 가리키는 TYPE* 포인터 auto WhoAmI = monsters; // monster_0[주소] StatInfo* monster_0 = monsters; monster_0->hp = 100; monster_0->attack = 10; monster_0->defence = 1; // 포인터의 덧셈 (StatInfo의 크기만큼 ..
#include using namespace std; struct StatInfo { int hp; int attack; int defence; }; void CreateMonster(StatInfo* info) { info->hp = 100; info->attack = 8; info->defence = 5; } // 특정 조건을 만족하는 몬스터를 찾는 함수 StatInfo* FindMonster() { // TODO : Heap 영역에서 뭔가를 찾아봄 // 발견 시 // return monster~; return nullptr; } // StatInfo globalInfo; // 주소 전달 방식 // [매개변수][RET][지역변수(info)][매개변수(&info)][RET][지역변수] void Prin..
#include using namespace std; struct StatInfo { int hp; int attack; int defence; }; void CreateMonster(StatInfo* info) { info->hp = 100; info->attack = 8; info->defence = 5; } // 1) 값 전달 방식 // [매개변수][RET][지역변수(info)][매개변수(info)][RET][지역변수] void PrintInfoByCopy(StatInfo info) { cout
#include using namespace std; struct StatInfo { int hp; // +0 int attack; // +4 int defence; //+8 }; void EnterLobby(); StatInfo CreatePlayer(); // 포인터x void CreateMonster(StatInfo* info); // 포인터o // player 승리 시 true 패배시 false bool StartBattle(StatInfo* player, StatInfo* monster); int main() { EnterLobby(); return 0; } void EnterLobby() { cout hp = 0; if (player->hp == 0) return false; } } https..
#include using namespace std; // 1) 주소 연산자 (&) // 2) 산술 연산자 (+ -) // 3) 간접 연산자 (*) // 4) 간접 멤버 연산자 struct Player { int hp; // 주소값 + 0 int damage; // 주소값 + 4 }; int main() { int number = 1; // 1) 주소 연산자 (&) // - 해당 변수의 주소를 알려달라 // - 더 정확히 말하면 해당 변수 타입(TYPE)에 따라서 TYPE* 반환 int* pointer = &number; // 2) 산술 연산자 (+ -) number += 1; // 1 증가 // 포인터에서 +나 -등 산술 연산으로 1을 더하거나 빼면, // 한번에 TYPE 만큼의 주소를 입력한 숫자 만..
#include using namespace std; void SetHP(int* hp) { *hp = 100; } int main() { // 포인터 사용 int hp = 1; SetHP(&hp); // 포인터 사용 int number = 1; // 타입의 불일치 // 아래 캐스팅의 경우 늘어난 바이트 수에 따라 다음 주소를 침범하게 되는데 해당 주소에 다른 값이 존재하고 있을 경우 덮어씌워버리는 일을 해버림 __int64* ptr = (__int64*)&number; *ptr = 0xAABBCCDDEEFF; return 0; } https://www.inflearn.com/course/%EC%96%B8%EB%A6%AC%EC%96%BC-3d-mmorpg-1/dashboard [C++과 언리얼로 만드는 ..
#include using namespace std; int main() { // 지금까지 사용한 방식 // number라는 이름의 4바이트 정수 타입의 바구니를 만든다 // number라는 변수 스택 메모리에 할당 // number = 1이라 함은, number 바구니에 1이라는 숫자를 넣으라는 의미 // 따라서 스택 메모리에 있는 특정 주소(number 바구니)에 우리가 원하는 값을 넣은 셈 // number는 비유하자면 메모리에 이름을 붙인 것 // 단점은 TextRPG 원본 수정 // 특정 메모리를 강제로 조작할 수 있게 만들어 주는 수단이 포인터. int number = 1; // TYPE* 변수이름; // 2가지 요소 // - TYPE // - * // 바구니는 바구니이지만 // [주소를 저장..