본문 바로가기
~ 2024.03/C 언어

[C 언어 기초] 포인터

by Monett 2023. 12. 13.
반응형

K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다.
현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다.

포인터 변수

대부분의 최신 컴퓨터들에서 주 메모리는 바이트(byte) 단위, 즉 8비트짜리 정보를 저장할 수 있는 단위로 나뉜다.

 

각 바이트에는 고유한 주소(address)를 가지므로, 모든 바이트들은 서로 이 주소를 통해 메모리 내에서 구분한다.

 

프로그램의 모든 변수들은 메모리에서 한 개 이상의 바이트를 차지한다.

 

첫번째 바이트의 주소를 변수의 주소라고 부른다.

 

i 변수가 주소 0과 1을 갖는 바이트를 차지한다면 i의 주소는 0이다.

 

여기서 등장하는 개념이 바로 포인터다.

주소를 숫자로 표현해주기는 하지만 그 값은 정수와는 약간 달라 일반적인 정수형 변수에 저장할 수 없다.

 

주소값은 특수한 포인터 변수에 저장해줄 수 있다.

i 변수의 주소를 포인터 변수 p에 저장한다면 p는 i를 "가리킨다"고 말한다. 

포인터 변수 선언

포인터 변수는 일반 변수를 선언하듯이 선언한다. 

유일한 차이점은 변수 이름 앞에 별표가 있어야한다.

int *p;

 

위와 같은 선언은 p가 int 형을 갖는 개체를 가리키는 포인터 변수라는 뜻이다.

포인터 변수를 읽을때는 오른쪽에서 왼쪽으로 읽는 것이 도움이 된다고 한다.
위의 경우 pointer to int로 해석하면 좋다. 

const int *p 나 int const * p; 또한 오른쪽에서 왼쪽으로 읽으면
const int *p => pointer to const int (상수 정수형을 가리키는 포인터)
int const *p => const pointer to int (정수형을 가리키는 상수 포인터)

주소 연산자

포인터 변수를 선언한 후 할당은 어떻게 해야할까?

int i;
int *p = &i;

 

변수의 주소를 & 연산자를 사용해 할당해줄 수 있다.

위 구문은 p가 i를 가리킨다고 볼 수 있다.

참조 연산자

포인터 변수가 개체를 가리키고 있다면, * 연산자를 통해 개체가 어떤 값을 갖는지 접근할 수 있다.

int i = 50;
int *p = &i;

printf("%d", *p); // 50
반응형

'~ 2024.03 > C 언어' 카테고리의 다른 글

[C 언어 기초] 문자열 문자마다 읽기  (0) 2023.12.13
[C 언어 기초] 포인터와 배열  (0) 2023.12.13
[C 언어 기초] 선택문  (0) 2023.12.13
[C 언어 기초] 표현식  (0) 2023.12.13
[C 언어 기초] 서식 입출력  (0) 2023.12.12