본문 바로가기
TIL (Today I Learned)/C 기초 문법

[C 기초 문법] 포인터?

by 둥굴프 2022. 12. 25.
이 포스팅은 한국기술교육대학교 김덕수 교수님의 'C언어 Lv2' 강의를 바탕으로 작성됐습니다.

 

포인터에 대한 이해가 부족하여 포스팅을 작성하게 됐습니다.

제 이해를 위해 작성하는 포스팅이라, 최대한 구어체로 작성될 수 있으며 도움이 안 될 수 있습니다.

 

&(Ampersand) : "변수의 주소" (시작 주소)

메모리 주소의 길이 = Address bus의 크기 (word)

배열의 이름 = 배열 시작 주소

" Call by reference는 원본이 전달되는 것과 유사하다."

 

그렇다면 다음 두 가지 궁금점이 생긴다.

1. 메모리 주소를 전달받을 매개변수는 무엇인가?

2. 해당 주소의 값을 변경하려면 어떻게 해야하는가?

 

#1 포인터 ( Pointer or Pointer Variable)

1. 주소를 저장하는 변수

크기 : Address bus의 크기

 

2. 선언방법

int *p = NULL;

*(asterisk)를 사용하여 선언

일반적으로, NULL(0)로 초기화

"포인터는 자료형이 저장된 공간의 주소를 가리킨다."

포인터가 가리킬 변수형에 맞추어 타입을 명시해야 한다.

초기화 값이 정해지지 않은 경우, NULL로 초기화해야 한다.

 

1. 메모리 주소를 전달받을 매개변수는 무엇인가? -> Pointer Variable

 

 

 

 

#2 간접 참조 (Dereferencing or Indirection)

1. 포인터의 주소 값을 이용해서 데이터 (or 변수) 값에 접근하는 것

해당 주소가 가리키는 메모리 위치에 접근

포인터 선언 시 사용한 변수형의 크기에 맞추어 접근

 

2. *(asterisk)를 사용해서 참조

 

*(asterisk)를 포인터 변수 앞에 붙여주면 포인터 변수가 가지고 있는 주소값을 찾아가서 값을 읽어온다.

 

*(asterisk)를 사용해 변수에 접근하여 참조된 메모리 위치의 값을 변경할 수 있다.

 

2. 해당 주소의 값을 변경하려면 어떻게 해야 하는가? -> 간접 참조

 

 

 

마치며,

포인터의 유효성 검사를 하는 것이 좋다.

포인터의 주소값이 유효하기 않은 값일 때 치명적인 오류를 야기할 수 있기 때문이다.

유효성 검사의 예로는 단순하게 if(pA != NULL) { ... } 형태로 NULL값이 아닌지 확인하는 것이 있다.

댓글