• 포인터

주소 저장 목적의 변수

 

&[주소연산자] - 해당 변수의 주소값을 반환


*[간접 참조 연산자] - 포인터 앞에 붙을시에 포인터가 가진 주소에 데이터를 반환

 

int * a 가 있다면 a는 int형 포인터다

 

이 말은 int가 이 주소의 데이터형 단위 라는 것이며

 

이 데이터형 단위로 읽는다는 것이다

 

 

 


 

  • NULL , nullptr

NULL 은 상수 0 이라고 define되어 있다

그렇기에 포인터외의 자료형도 사용할수가 있다

 

 

nullptr C++에서 생겼으며 말 그대로 NULL값을 가진 포인터를 의미하여 포인터끼리만 연산이 가능하다

 

모두 포인터에 사용했을시에 핵심은 데이터가 0인지 판단하는것이지 정상적으로 할당받은 데이터를 판단할수는 없다

                                                                                          [ex) new로 할당 받은 주소]

 


 

  •  New

new 자료형 - 운영체제에서 자료형만큼의 데이터공간의 주소를 반환

저렇게 new만 써도 메모리가 할당된다

그렇기에 저 반환하는 주소를 포인터에 대입시키는 것이다

 

저 new의 실체는 operator new 라는 함수이다

 

배열형식으로 선언은

new 자료형 [num]

 


 

  • Delete

new가 메모리를 운영체제에서 받아왔다면 이건 운영체제에 받아온 메모리를 반환한다

 

이것도 마찬가지로 operator delete 가 본체이다

 

array형식을 delete할때는 " delelte [ ] 식별자  " 로 해줘야한다

그 이유는 소멸자 문제가 발생하기 때문이다.

[ 위에는 소멸자가 딱히 관련이 없기에 delete[ ] 를 delete로 바꾸어도 정상으로 돌아가긴한다 ]

소멸자가 한번 호출후 에러가 난다

 

 

이러한 주소하나만 delete에 넘겨주어도 주소가 가지고있는 할당된 메모리가 해제되는 이유같은 내용은

다른 글에 다시 정리한다

[ 작성중인 글 ]

https://ddidding.tistory.com/23

 


 

  • 배열 포인터

[ ] 를 사용하여 해당 인덱스의 배열 값을 나타내듯이 사용할 수 있다

 

+ 와 - 를 이용하여 해당 인덱스의 주소를 알아낼 수 있다

여기서의 0, 1, 2, 3 이 의미하는것은 정수 0, 1 이 아니라 a 포인터가 담는 자료형(int) 의 크기만큼 주소를 더한다는 뜻

 

그렇기에 int형의 크기 4 BYTE 만큼 주소가 증가한걸 볼 수 있다

 

위에 연산이 주소를 나타내는 것이기에

주소의 값을 나타내는 간접 참조 연산자 ( * ) 를 같이 사용하면 그 주소가 가지고있는 값을 확인할 수 있다

 

여기서 해당값의 주소를 알려주는 주소연산자( & )를 사용하면

다시 주소가 나오겠지ㅋㅋㅋ

 

배열과 포인터의 차이점이라면

 

1. 포인터는 변수이고

배열의 식별자는 상수라는 점이다

 

2. Sizeof를 사용했을 때

a 와 b 모두 첫번째 값의 주소를 나타내지만

 

포인터는 주소의 크기 ( 자료형의 크기가 아님 )

배열은 배열의 크기가 출력된다

 

 

+ Recent posts