학습 목표
포인터 변수를 정의하고 사용할 수 있다.
포인터
C에서는 포인터 개념을 통해 변수의 주소를 쉽게 저장하고 접근할 수 있게 한다. 지난 글에서 배운 '*'연산자를 사용해서 프로그램을 만들어보자.
#include <stdio.h>
int main(void)
{
int n = 50;
int *p = &n;
printf("%p\n", p);
printf("%i\n", *p);
}
위 프로그램을 보면
- *p라는 변수에는 &n값, 즉 변수 n의 주소를 저장한다.
- int *p에서 *는 이 변수가 포인터임을, int는 이 포인터가 int 타입의 변수임을 가리킨다.
- 첫 번째 출력 값을 보면 p는 형식 지정자 %p를 사용해 변수 n의 주소를 출력한다(= 포인터 p의 값).
- 두 번째 출력 값을 보면 *p는 형식 지정자 %i를 사용해 변수 n의 값을 출력한다(= 포인터 p가 가리키는 변수의 값)
실제 컴퓨터 메모리 상에서 변수 p는 위와 같이 저장된다. 추상적으로 p가 n을 가리킨다고 생각해도 된다.
생각해보기
포인터의 크기는 메모리의 크기와 어떤 관계가 있을까?
포인터의 크기는 메모리의 크기와 상관이 없다. 포인터의 바이트 크기는 cpu의 기본 처리 bit수, 그리고 운영체제의 채택 bit수에 따라 정해진다. cpu가 64bit이고 운영체제도 64bit라면 포인터는 8바이트가, cpu가 64bit이나 운영체제가 32bit라면 포인터는 4바이트가 되는 식이다.
(생각해보기의 답변은 네이버 CS50 코칭 스터디 2기 Teddy 코치님의 도움을 받았습니다.)
이 글은 네이버 부스트 코스 David J. Malan(데이비드 J. 말란) 교수님의 모두를 위한 컴퓨터 과학(CS50 2019) 강의를 수강하고 작성한 글입니다. 본 강좌 내 실습에서는 CS50 Sandbox를 사용합니다.
'Programming > C' 카테고리의 다른 글
C 언어 | 문자열의 비교 (0) | 2021.02.20 |
---|---|
C 언어 | 문자열과 포인터 (0) | 2021.02.19 |
C 언어 | 메모리 주소 (0) | 2021.02.19 |
C 언어 | 왜 배열을 선언할 때 상수 변수값을 크기로 지정할 수 없을까? (0) | 2021.02.04 |
C 언어 | 명령행 인자 (0) | 2021.02.02 |