컴퓨터는 데이터를 '메모리'라는 물리적인 장치에 쓰고 읽고 지운다.
다른 언어와 차별화를 시키는 '포인터'라는 개념은 C를 더 특별하게 만든다.
바로 '직접 접근'이 가능하기 때문이다. 다시 말해, 더 기계친화적인 프로그램을 만들 수 있다.
포인터란?
메모리에 있는 데이터의 주소를 가지는 일종의 변수이다. '주소'에 주목을 하자. 데이터를 가지는게 아니라 데이터가 들어가있는 메모리의 주소를 가진다. pointer를 한글로 번역해보면 '가르키는 것'이다. 즉, 변수의 주소를 가르킨다고 볼 수 있다.
포인터를 사용하는 이유?
데이터의 복사를 피하고 데이터를 공유하여 작업할때 필요하다. 데이터의 복사본을 가지고 노는게 아니라 데이터의 원본을 다룰 수 있다.
직접 접근하기 때문이다. 쉽게 설명하자면 예를 들어, 누군가 배열이 뭔가요? 질문했을때 c언어 책에있는 배열설명을 전부 복사해서 주는것보다 배열이 설명되어있는 쪽수를 말해주는 것이다. 배열이 설명되어있는 복사본 전부를 가위로 자르고 불로 태워도 c언어 책에있는 원본은 그대로 있다. 하지만, 쪽수를 알려준다면 원본에 '직접 접근'할 수 있다.
사용 예(주소연산자 &)
int i;이렇게 변수를 정의 했다면, &i를 하면 변수 i의 메모리 상 주소를 알 수 있다.
포인터의 선언과 초기화
이번엔 포인터를 선언해보자.
int *p; 포인터는 이렇게 선언한다. 하지만, 선언만 했지 초기화는 하지않았다.
char *c
double *d
float *f 다양한 자료형으로 선언이 가능하다.
이젠 선언 후 초기화 까지 해보자.
int i = 25;
int *p = &i;
데이터가 25인 변수 i를 만들고 변수 i의 주소를 포인터 p에 저장한다.
printf("&u", &i);
printf("&u", p);
이걸 실행시켜보면 동일한 주소가 나온다. &i또한 변수 i의 주소이고, 포인터변수 p또한 변수 i의 주소로 초기화를 해줫기 때문이다.
'C프로그래밍 > 개인 공부' 카테고리의 다른 글
C언어 - 쉽게 풀어쓴 C언어 express 10장 배열 실습문제(짝수번) (0) | 2022.07.13 |
---|---|
C언어 - 정렬 (0) | 2022.07.06 |
C언어 - 배열과 함수 (0) | 2022.07.06 |
C언어 - 배열의 복사, 비교 (0) | 2022.07.04 |
C언어 - 배열요소의 개수 계산(sizeof) (0) | 2022.07.04 |