반응형
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 |