Language Study/C

[C/C++] 08 - 01 POINTER 기초

지미닝 2022. 11. 9. 00:54

목차

1. 메모리 구조와 변수

2. 포인터의 개념

3. *(Pointer Dereference) 연산자

4. 포인터 변수 & 주소 값

5. 포인터 활용


①메모리 구조와 변수

Memory

  • 메모리 셀이 연속해 나열되어 있는 구조
  • 각 메모리 셀은 식별을 위한 주소를 가지며 셀 내에 이진 값을 저장할 수 있다

Variable

  • 값을 저장하는 메모리 공간
  • Identifier, Type, Value, Memory Size, Memory Adress, Scope, Lifetime 등을 속성으로 가진다.


② 포인터의 개념

포인터(Pointer)란 지시자, 가리키는 자를 의미한다. 즉, 포인터의 Value값은 대상의 '주소'이다.

그렇다면 대상의 주소를 어떻게 가져오는가? → 연산자 &를 활용하는 것이다.

포인터 연산자에 연산자 *를 적용한다면? →  그 주소에 저장된 Value값을 가져와준다.

 

✓ Pointer Variable과 &(Address of) 연산자!

1) &(Address of) 연산자란,

  • 대상의 주소를 얻어오는 연산자
  • Referencing 연산자로도 불린다

2) Pointer Variable이란,

  • 주소를 저장하는 변수

3) Pointer 변수의 Type은?

  • 참조하는 변수의 자료형에 의해 결정된다

 

✓ Pointer Variable의 선언 방법

  • 포인터 변수를 의미하는 *와 Reference Type 사이에 공백이 있어도 괜찮다
  • 한 선언에서 여러개의 포인터를 선언할 경우에는 각 변수앞에 *를 붙여야 한다


③ *(Pointer Dereference) 연산자

1) &: "Address of" 연산자

  • Referencing 연산자, 대상의 주소를 얻어오는 연산자

2) *: "Pointer Dereference" 연산자

  • Dereferencing 연산자, Referencing의 역과정으로 주소로부터 대상 변수를 얻어오는 연산자
    • Indirection이라고도 한다. 변수의 이름을 통해 직접 접근하는 것이 아니라 주소를 통해 간접 접근


④ 포인터 변수 & 주소 값

%p: 주소를 printf로 출력할 때의 FSF

  • 주소도 일종의 숫자 값으로 출력할 수 있다
  • 출력 값의 형식은 Hexa다

포인터 변수의 크기는? → 참조 자료형에 관계 없이 4/8bytes로 동일하다

포인터 변수에 대한 &연산도 가능하다. 포인터 변수 역시 주소를 가진다.


⑤ 포인터 활용

※ Call by Address Value

  • 변수의 포인터/ 주소를 알면 호출에 쓰인 변수의 값을 함수 내에서 변경할 수 있다.
  • C언어의 함수 호출 방식은 : Call by Value다.
    • 변수의 값만 전달 가능하며 변수 자체를 함수로 전달할 수 없다. (매개변수를 복사해서..)

  • 그러나, 만약 변수의 값이 아닌 주소를 (매개변수로 복사하여)전달할 수 있다면??
    • Dereferencing을 적용하면 변수 x에 접근할 수 있고 이를 통해 변수 x값을 변화시킬 수 있다.


요약