[C++] 포인터 간단하게 정리하기

윤경·2022년 2월 25일
0

C++

목록 보기
20/20

pointer 포인터

포인터는 메모리의 주소값을 저장하는 변수이다.

그리고 그 포인터 또한 주소값을 가진다.

포인터를 사용하는 이유

  1. 메모리에 직접 접근할 수 있다.
  2. 구조화된 자료를 만들어 효율적으로 운영할 수 있다.
  3. call by reference 방식을 이용할 수 있다.
  4. 배열, 구조체 등 복잡한 자료 구조와 함께 함수에 쉽게 접근할 수 있다.
  5. 메모리를 동적 할당 할 수 있다.

포인터 연산자

주소 연산자 - &(해당 변수 메모리 주소 값을 반환)
참조 연산자 - *(해당 주소를 참조해 주소에 저장된 값을 반환)

int형 변수의 주소를 담고 싶을 때 ➡️ int *[변수명]
이렇게 담고자 하는 자료형에 참조 연산자를 붙여 선언한다.

그렇지만 포인터 변수의 자료형이 여러가지이고 이런 건 아니다.
64bit OS에서는 8바이트로 모든 자료형의 포인터 변수의 크기가 똑같다.

그렇다면 왜 담고자 하는 자료형에 참조 연산자를 붙이는걸까🤷‍♀️

➡️ 그 주소에 있는 값을 읽어야하는 상황이 생기기 때문에 어떠한 자료형의 주소인지 알려주기 위함

포인터 연산

포인터는 변수이다.
그래서 덧셈, 뺄셈 연산이 가능하다. 하지만 곱셈, 나눗셈은 불가능하다.

덧셈, 뺄셈이 가능하다고 해서 일반적인 변수의 연산을 떠올려서는 안된다.

포인트에 ++연산자를 적용했을 경우 char 형이면 1, short 형이면 2, int/float 형이면 4, double 형이면 8씩 증가한다.
즉, 포인터가 가리키는 자료형의 크기만큼 증가한다는 것이다.

포인터 사용시 주의할 것

1. 포인터 변수 선언시 초기화 필수

선언만 한다면 이 포인터 변수는 쓰레기 값을 가지게 되고 내용을 변경하면 나도 모르는 사이 덮어씌여져 문제가 발생할 수 있다.

➡️ NULL로 초기화하기

선언만 하기보다는 당장 사용하지 않는다면 NULL로 설정해놓아야 한다.
NULL은 0으로 정의되어 있어 (CPU 사용 영역이라) 일반 프로그램이 접근할 수 없어 안전하다.

2. 포인터 자료형과 변수의 자료형 일치시키기

3. 절대 주소 사용 금지

절대 주소는 라파이와 같은 임베디드 시스템에서만 사용한다.

컴퓨터는 실행할 때마다 할당되는 주소가 다르므로 절대주소를 사용하면 안된다.


참고

profile
개발 바보 이사 중

0개의 댓글