비타Cpp

변수의 주소값과 포인터 자료형 본문

C,C++

변수의 주소값과 포인터 자료형

멍C 2020. 5. 17. 15:22

모든 변수들은 선언과 동시에 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 = &num;
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
Comments