Stack Variables 스택 변수 : 변수가 많아질수록 메모리 공간이 위로 쌓여간다고 하여 stack. 컴퓨터가 변수를 인식/접근하는 방법 : 메모리 맵에서 가장 위에서부터 몇 번째에 위치하고 있는지로 구분한다. 변수의 이름을 기억하지 않는다. 예제) 이 때, 우리가 생각하는 추상적인 메모리 구조는 이런 느낌이다. 하지만, 실제 작동하는 stack 메모리 구조를 추상적으로 표현해 보면 이런 식이다. 각 변수의 주소를 출력해서 실제로 그런지 확인해 보자. Stack 메모리의 주소가 큰 수(a)에서 작은 쪽으로(d) 쌓여 나간다는 것을 실제로 확인해 볼 수 있다. 즉 이런 식이다! 더 로우 레벨로 내려가면 실제 메모리 구조는 격자 무늬로 되어 있다. 그렇다면 이런 모양으로 구성되었을 것이다. 주의점! ..
C++ 삼항연산자 (조건연산자) : C++ 삼항연산자 는 if ~ else 문을 대신하여 사용할 수 있는 연산자이다. 조건연산자 또는 삼항연산자 라고 불린다. 1. 형태 ‘조건’ ? ‘A’ : ‘B’ : 조건이 참이면 A를 반환하고 조건이 거짓이면 B를 반환 2. 예시 1) 실무에서 많이 사용하는 형태 MAX_UINT16 은 65535로 define 되었으므로 그대로 출력된다. MAX(a,b) 를 a>b 가 참이라면 a를 반환, 거짓이라면 b를 반환하기로 define 한다. 따라서 MAX(10, 100) 은 10>100 이 거짓이므로 100을 반환해 주면 된다. 2) int nResult = 0; int A = 10, B = 20; nResult = (A < B) ? A : B; std::cout
지금까지 배운 언어들을 활용해서 블랙잭 게임을 만들어 보자. 참고> namu.wiki/w/%EB%B8%94%EB%9E%99%EC%9E%AD(%EC%B9%B4%EB%93%9C%EA%B2%8C%EC%9E%84) 블랙잭(카드게임) - 나무위키 인셔런스(Insurance) 딜러의 오픈된 카드가 에이스일 경우, 딜러가 블랙잭이 나올 가능성에 대비해 보험을 들어두는 것을 말한다. 건 금액의 절반(절반은 상한일뿐이고 절반이하를 지불하는것도 namu.wiki 전부 다 구현하기는 어려워 기본적인 게임 기능만 구현해 보았다. 1. 트럼프 카드 만들기 - 카드의 숫자와 문양 출력하기 - 구조체 활용 2. 플레이어의 손패(손에 들고 있는 패)와 손패의 합(카드의 숫자의 총합) 만들기 - 구조체 활용 3. 카드 섞기 - 스왑,..
지금까지 배운 C++ 코딩을 최대한 활용해서 섯다 게임을 만들어 보자. 먼저 필요한 변수들을 생각해 본 후, 게임이 어떤 식으로 진행될지 생각해 본다. 1. 섯다 게임을 플레이할 플레이어 숫자를 정하는데, 플레이어 숫자를 플레이어가 직접 정하도록 한다. 2. 화투 카드를 구현해야 한다. 화투 카드는 1부터 10까지 존재하고, 총 20장을 사용할 것이다. 3. 광땡, 떙, 끗의 족보를 구현해야 한다. 구현한 족보를 통해 승부를 내야 한다. 4. 배팅금과 소지금을 정해야 한다. 구조체로 카드의 숫자와 광 유무를 한번에 정할 수 있다. 또한 플레이어별로 족보값을 가지게 할 수 있다. 플레이어 수는 동적할당을 통해서 런타임에 정하도록 만들어 줄 것이다. 이넘문을 사용해서 정수형으로 족보를 쉽게 비교해서 승부를 ..
1. typedef typedef라는 키워드는, int형, double형과 같은 일반형에 별명을 붙여주는 키워드이다. typedef 형명 식별자; 예를 들어, 이 코드는 unsigned long int형에 Count 라는 짧은 이름을 붙여준다. 이처럼 typedef를 사용하면 다음과 같이 'Count'형 변수 num을 사용할 수 있게 된다. 이 문장의 뜻은 다음 코드와 같다. 즉, typedef를 사용하면, 이미 존재하는 형에 별명을 붙일 수 있는 것이다. typedef를 사용하면 긴 형명에 별명을 붙일 수 있기 떄문에 코드의 가독성을 높일 수 있다. 2. 열거 enum C++는 프로그래머가 새로운 형을 만들수 있도록 도와준다. 프로그래머가 만든 형을 사용자 정의형(user-defined type)이라고..
참고 nybot-house.tistory.com/9 변수와 스코프(지역변수와 전역변수) 02.14 변수의 종류 파악하기 지금까지 변수와 배열을 사용했던 곳은 main() 함수 안이거나 직접 만든 함수 안이었다. 그러나 변수와 배열의 선언은 반드시 함수 안에서만 해야 하는 것은 아니다. 변수와 nybot-house.tistory.com 메모리의 동적인 확보 전역 변수의 메모리는 프로그램이 시작될 때 확보된다. 또한 일반 지역 변수의 메모리는 함수가 선언되고 호출될 때 확보된다. 이 두 가지 방법 외에도 프로그래머가 원하는 타이밍에 메모리를 확보하는 방법이 있다. 이것을 동적 메모리 확보(dynamic allocation)라고 부른다. 이 방법을 사용하면 변수를 이용한 메모리 사용법과 다르게 프로그래머가 메..
변수의 종류 파악하기 지금까지 변수와 배열을 사용했던 곳은 main() 함수 안이거나 직접 만든 함수 안이었다. 그러나 변수와 배열의 선언은 반드시 함수 안에서만 해야 하는 것은 아니다. 변수와 배열은 함수 바깥에서도 선언 가능하기 때문이다. 함수 안에 선언한 변수를 지역 변수(local variable), 함수 바깥에 선언한 변수를 전역 변수(global variable) 이라고 부른다. 스코프의 원리 이해하기 지역 변수와 전역변수는 어떤 차이점이 있을까? 먼저 지역 변수(local)의 경우, 선언된 함수 안에서만 사용할 수 있다. 반면 전역 변수(global)는, 어떠한 함수에서도 사용할 수 있다. 밑의 그림은 각각의 변수의 유효 범위를 그림으로 표현한 것이다. 이러한 변수 이름의 통용범위를 가리켜 ..
더보기 Code 영역 프로세스가 실행할 코드와 매크로 상수가 기계어의 형태로 저장된 공간이다. 컴파일 타임에 결정되고 중간에 코드를 바꿀 수 없게 Read-Only 로 지정돼있다. Data 영역 코드에서 선언한 전역변수 또는 static 변수 등등이 저장된 공간이다. 전역변수/static 값을 참조한 코드는 컴파일 하고 나면 Data 영역의 주소값을 가르키도록 바뀐다. 실행 중도에 전역변수가 변경 될 수도 있으니 이 영역은 Read-Write로 지정돼있다. 단, 초기화 되지 않는 전역 변수는 BSS 영역에 할당된다. Stack 영역 (스택) 1) 매개변수, 지역변수 - 함수 2) 함수호출 할당, 함수호출끝 해제 3) 공간이 작다(보통 1mb) 4) 크기가 컴파일 타임에 정해진다. 자료구조로 많이 알려진 ..