목차
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값을 변화시킬 수 있다.
요약
'Language Study > C' 카테고리의 다른 글
[C/C++] 09 - 01 구조체 기초 (0) | 2022.11.23 |
---|---|
[C/C++] 08 - 02 배열, 문자열과 포인터 (0) | 2022.11.21 |
[C/C++] 07 - 03 함수와 Modular Programming (0) | 2022.11.02 |
[C/C++] 07 - 02 STANDARD LIBRARY 함수의사용 (0) | 2022.11.02 |
[C/C++] 07 - 01 함수와변수,함수인자심화학습 (0) | 2022.10.25 |