C언어 - 포인터(Pointer)
본문 바로가기
CS/알고리즘 및 자료구조

C언어 - 포인터(Pointer)

by IYK2h 2020. 8. 21.
728x90

변수의 메모리 주소, 값


 

메모리는 메모리의 값과 메모리의 주소와 같이 저장된다.

실행 결과를 보면 a의 값은 5로 나오고 &a는 a의 주소 값을 출력한다.

이때 주소는 고정된 값이 아니라 컴퓨터마다, 실행할 때마다 달라진다.

*시스템에 따라 32비트 64비트에 따라 메모리의 범위도 달라진다.

 

포인터란


메모리의 주소값을 저장하기 위함이다.

메모리 값이 변수에 저장되듯 메모리의 주소는 포인터 변수에 저장된다.

 

포인터 변수 선언


선언 시 포인터 변수를 사용한다.

자료형* 변수명 - int* hi;

자료형 * 변수명 - int * hi;

자료형 *변수명 - int *hi;

세 가지 방식으로 선언 가능하다. 편한 방식으로 사용하면 된다.

포인터는 선언 시 반드시 먼저 초기화되어야 한다. 그렇지 않으면 의도하지 않은 메모리의 값이(쓰레기 값) 변경되기 때문에 오류가 발생할 수 있다.

추후에 값을 넣는다면 처음부터 NULL값으로 최기화 해주는 게 좋다.

사실 좋다기보단 필수라고 생각하는 게 좋다.

 ex) int *hi = NULL;

중요 포인트 hi 는 주소 값을 저장하고  *hi는 메모리 주소에 위치한 데이터 값을 나타낸다.

이 부분은 꼭 이해하고 넘어가야 한다.

 

포인터 연산자(* , &)

 


 

정리해보자면

일반 변수나 상수와 포인터 변수의 차이점은 아래와 같다.

 

 

여기서 ...

살짝 궁금할 수도 있다.

왜 포인터 변수는 주소인데 자료형이 있는지!

주소는 변수가 할당하고 있는 주소의 가장 처음 주소를 가리킨다.

chat의 경우 1 바이트, int의 경우 4 바이트 등등 자료형에 따라 시스템의 비트에 따라 자료형의 바이트의 크기가 바뀐다.

즉 변수는 일정 크기를 가지고 있다.

포인터 변수는 그 일정 크기를 받기 위해 일부 주소를 확보하기 위해 포인터 변수를 선언할 때 자료형이 필요하다. 자료형이 없다면 컴퓨터는 이 포인터 변수가 어느 정도의 크기를 할당해야 하는지 알 수가 없다.

 

 

 

 

 

C언어 - 포인터 연산, 포인터와 배열의 관계

C언어 - 포인터 활용, call by value, call by reference

 

728x90

댓글