일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- DirectXTK
- engine
- DirectX12
- 다이렉트X 튜토리얼
- 동기화
- CommandList
- 다이렉트X
- Direct3D
- Input Assembler
- 프로그래밍
- 코딩
- CPU
- 다이렉트 초기화
- c
- GPU
- 세팅
- 다중표본화
- 전처리문
- 게임수학
- swapchain
- Direct Init
- vertex
- C언어
- DESC
- Direct3D Init
- DirectX
- RenderTargetView
- UE4
- View
- C++
- Today
- Total
비타Cpp
변수의 주소값과 포인터 자료형 본문
모든 변수들은 선언과 동시에 RAM에 자동으로 주소값이 할당된다.
하지만 RAM은 RANDOM ACCESS MEMORY로 무작위의 주소값이 할당되는데, 이는 변수가 가지고 있게 된다.
만약 int형 변수를 하나를
int num;
이렇게 선언하면, int 는 4byte이므로 4byte크기의 공간이 할당 된다.
이런식으로 할당이 되게 되는데 초기화를 안했기 때문에 안에는 쓰레기 값이 들어가있다.
어쨌든 컴파일러는 이제 부터 num변수를 만날때마다 0x0001의 주소값을 찾아가게 되는것이다.
그리고 이 주소값은 코드에서도 접근이 가능한데, 선언된 변수앞에 &를 붙여주면 이는 해당변수의 주소값을 의미하게된다.
int main()
{
int num;
std::cout << &num << std::endl;
system("Pause");
}
주소값이라는것이 있다면 당연히 이를 저장할수있는 자료형 또한 존재 한다.
이것이 바로 C++의 핵심인 포인터 라는 것이다.
처음 접하면 상당히 헷갈릴수 있으니 주의해야한다.
일단 포인터 변수는 주소값을 저장하는 자료형인데, 표현식은 '자료형' + '*' 으로 표시된다.
int * num1;
float * num2;
char * txt;
*는 곱셈연산자로 쓰이기도 하지만 이렇게 포인터 자료형으로도 쓰인다.
그리고 포인터 자체는 주소값이기때문에 앞에오는 자료형에 관계없이 메모리상의 주소값이된다.
주소값은 x86(32비트)환경에서는 32비트 = 4바이트의 크기를 가지며, x64(64비트)환경에서는 64비트 = 8바이트의 크기를 가진다.
int num = 10;
int* p;
p = #
std::cout << *p << std::endl;
포인터의 사용방법은 맞는 형식의 주소값을 넣어주면된다. int형 포인터에는 int형 변수의 주소값을 넣으면된다.
그리고 포인터를 이용해 포인터가 가리키는 주소값 안에 있는 데이터에 접근하려면 *를 앞에 붙여주면된다.
'C,C++' 카테고리의 다른 글
포인터의 연산과 배열(array)(1) (0) | 2020.06.03 |
---|---|
R-value와 L-value (0) | 2020.05.17 |
const 위치에 따른 의미들 (0) | 2020.05.16 |
조건문 switch (0) | 2020.04.22 |
조건문 if, if ~ else if ~ else 가위 바위 보 게임 (0) | 2020.04.21 |