- 포인터
주소 저장 목적의 변수
&[주소연산자] - 해당 변수의 주소값을 반환
*[간접 참조 연산자] - 포인터 앞에 붙을시에 포인터가 가진 주소에 데이터를 반환
int * a 가 있다면 a는 int형 포인터다
이 말은 int가 이 주소의 데이터형 단위 라는 것이며
이 데이터형 단위로 읽는다는 것이다
- NULL , nullptr
NULL 은 상수 0 이라고 define되어 있다
그렇기에 포인터외의 자료형도 사용할수가 있다
nullptr C++에서 생겼으며 말 그대로 NULL값을 가진 포인터를 의미하여 포인터끼리만 연산이 가능하다
모두 포인터에 사용했을시에 핵심은 데이터가 0인지 판단하는것이지 정상적으로 할당받은 데이터를 판단할수는 없다
[ex) 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 모두 첫번째 값의 주소를 나타내지만
포인터는 주소의 크기 ( 자료형의 크기가 아님 )
배열은 배열의 크기가 출력된다
'C++ > [책] C++ 기초 플러스' 카테고리의 다른 글
[ 210p ~ 219p ] 도트 멤버 연산자 & 화살표 멤버 연산자, 데이터의 저장공간, 포인터 장난 (0) | 2021.07.01 |
---|---|
[ 203p ~ 209p ] 문자열 상수 (0) | 2021.06.30 |
[ 160p ~ 178p ] 구조체, 공용체, 열거체 (0) | 2021.06.03 |
[ 130p ~ 160p ] 배열, 문자열, string, raw문자열 (0) | 2021.06.01 |
[ 70p ~ 130p ] 식별자 규칙, 정수&실수, 멤버 연산자, const, static_cast, auto (0) | 2021.05.31 |