응애맘마조

포인터 본문

공부/개인

포인터

TH.Wert 2023. 4. 8. 18:34

포인터는 메모리의 주소 값을 저장하기 위한 변수입니다. 즉, 메모리 공간을 참조하는 기준이 됩니다.

위의 사진에서 num은 0x00000007, c1은 0x00000041, c2는 0x00000042라는 것을 알 수 있습니다.

(사용자의 컴퓨터 및 사양 및 환경에 따라 주소값은 달라질 수 있습니다.)

 

이처럼 자료형의 크기에 따라 할당되는 크기가 달라집니다. char은 1바이트이기 때문에 41, 42로 나오지만 int는 4바이트이기 때문에 표기는 0x00000007이지만 정확히는 0x0000007부터 0x00000010까지에 걸쳐서 할당이 되어있습니다.


포인터의 선언 방법에 대해 알아보겠습니다. 연산문 구성은 다음과 같습니다.

먼저 num 변수에 7을 저장하고 포인터 변수 ptr을 선언해서 num의 주소 값을 포인터 변수 ptr에 &을 사용하여 저장합니다. 그러면 0019FEC8이라는 주소값을 출력할 수 있습니다.

여기서 &는 num의 주소 값이 반환되며 피연산자의 주소 값을 반환하는 연산자입니다.

 

반드시 자료형이 같아야하며 다르면 문제가 될 수 있습니다.

위의 사진처럼 선언과 자료형이 다르면 오류가 생기며 컴파일이 되지 않습니다.

포인터 변수는 가리키고자 하는 변수의 자료형에 따라 선언하는 방법이 달라집니다.

int*은 int형의 num1의 선언을 의미하고 float*은 float형의 num2의 선언을 의미하고 double*은 num3의 선언을 의미합니다. 표현의 원리는 type* ptr로 type형 포인터 변수 ptr이 됩니다. 추가로 코드처럼 *의 위치는 상관이 없습니다. 자료형 앞에 붙여도 되고 변수에 이름에 붙여도 되고 앞 뒤로 한 칸씩 띄워서 사용해도 됩니다.


포인터 변수에서도 연산을 할 수 있습니다.

num1과 num2를 각각 100으로 초기화를 하고 포인터 변수 pnum을 선언합니다. 다음 pnum 변수에 num1의 주소값을 저장합니다. 그래서 pnum은 num1을 가리킵니다. 다음 30을 추가해서 130이 됩니다. 다음 pnum에서 num2의 주소값을 저장해 다시 100으로 초기화를 해서 30을 감소해서 70이 됩니다. 그래서 출력을 하게 되면 130과 70이 나오게 됩니다.

 

읽어주셔서 감사합니다.

'공부 > 개인' 카테고리의 다른 글

참조자(Reference)  (0) 2023.04.10
상수  (0) 2023.04.05
auto  (0) 2023.03.31
Call by value/address/reference  (0) 2023.03.30
extern  (0) 2023.03.29
Comments