목록전체 글 (134)
오븐 노트
포인터나 참조처럼 주소를 다룰때는 그 주소가 정말 끝까지 유효한지 항상 습관처럼 생각하고 있어야하며 어지간해서는 스택에서 스택과 관련된 데이터의 주소를 바깥으로 넘겨주려는 행동은 조심해야함 스택에서만 존재하는 값의 주소를 외부로 가져간다는것 자체가 말이 안되고 절대 하면 안되는 행위 항상 함수와 주소의 생명 주기를 생각하고 있어야함 #include using namespace std; // 포인터나 참조처럼 주소를 다룰때는 그 주소가 정말 끝까지 유효한지 항상 습관처럼 생각하고 있어야하며 // 어지간해서는 스택에서 스택과 관련된 데이터의 주소를 바깥으로 넘겨주려는 행동은 조심해야함 // 스택에서만 존재하는 값의 주소를 외부로 가져간다는것 자체가 말이 안되고 절대 하면 안되는 행위 // 항상 함수와 주소의..
어셈블리 기준 다차원이나 일차원이나 약간의 연산 순서 차이가 있을뿐 성능은 같다. 결국 개발자가 보기 편하게 만들어진게 다차원 배열. #include using namespace std; int main() { int map[5][5] = { { 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1 }, { 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0 }, { 1, 1, 1, 1, 1 }, }; for (int y = 0; y < 5; y++) { for (int x = 0; x < 5; x++) { int info = map[y][x]; cout
사실상 2차 포인터를 초과하여 들어갈 일은 거의 없다. 있다면 소스가 문제가 있다고 볼 수 있을정도 #include using namespace std; void SetNumber(int* a) { *a = 1; } void SetMessage(const char* a) { // .rdata Bye주소[B][y][e][\0] // [매개변수][RET][지역변수(msg(Hello주소))] [매개변수(a(Hello주소))][RET][지역변수] // [매개변수][RET][지역변수(msg(Hello주소))] [매개변수(a(Bye주소))][RET][지역변수] // [매개변수][RET][지역변수(msg(Hello주소))] a = "Bye"; } void SetMessage(const char** a) { // [매..
#include using namespace std; void Swap(int& a, int& b) { int temp = a; a = b; b = temp; return; } void Sort(int numbers[], int count) { for (int i = 0; i < count; i++) { int best = i; for (int j = i + 1; j < count; j++) { if (numbers[j] < numbers[best]) best = j; } if (i != best) Swap(numbers[i], numbers[best]); } } void ChooseLotto(int numbers[]) { // TODO : 랜덤으로 1~45 사이 숫자 6개 (단, 중복 X) srand(..
#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