C언어 포인터란
title: “C언어 포인터란-“ categories:
-
C
#C언어 포인터란? : 네이버 블로그
모든 컴퓨터에는 메모리가 있고 변수 선언 시 메모리에 저장되게 된다.
포인터(pointer)는 메모리의 주소를 가지는 변수이다.
예시로 int i=1 을 하게 되면 i라는 변수가 생성되게 되고 int형은 4 바이트이니 메모리에 4바이트의 데이터가 저장된다.
그렇다면 변수의 주소는 어떻게 알 수 있을까? 그 역할로는 주소 연산자 &가 있다
아래 예제를 보자
#include
int main() {
int i = 10;
char c = 'a';
double f = 12.3;
printf("i의 주소: %u\n", &i); //i의 주소
printf("c의 주소: %u\n", &c);
printf("f의 주소: %u\n", &f);
}
&i로 주소를 10진수로 출력했다.
메모리는 운영체제에서 관리하므로 변수가 할당되는 메모리의 주소는 실행 시마다 바뀌게 된다.
그렇기에 우리는 변수의 주소를 저장할때 절대 주소가 아닌 변수의 주소를 저장하는것이다.
포인터의 선언은 일반 변수를 선언하듯 자료형 변수 이름과 비슷하다. 다른점은 *이 붙는다는 것이다
int *p; //p는 주소를 가지는 변수이다(포인터)
한 가지 알아야 할 점은
int *p1, p2, p3; 를 할 시 p1은 포인터 변수로 선언되지만 p2,p3는 일반 변수로 선언되게 된다.
꼭*을 생각하자.
그럼 포인터를 선언하는 방법을 알았고 변수의 주소를 포인터에 대입해봅시다
#include
int main() {
int i = 10;
char c = 60;
double f = 12.3;
int \*pi = NULL; //null로 초기화
char \*pc = NULL;
double \*pf = NULL;
pi = &i //주소를 대입
pc = &c
pf = &f
printf("pi : %u &i : %u\n", pi, &i);
printf("pc : %u &c : %u\n", pc, &c);
printf("pf : %u &f : %u\n", pf, &f);
}
우리는 위의 예제에서 주소를 포인터변수에 대입하는 방법을 알았다.
주의할 점은 포인터변수에는 주소를 저장하지 주소의 내용을 저장하지 않는다.
포인터를 적재적소로 활용한다면 데이터의 중복적인 복사를 피하고 메모리를 절약 할 수 있다.
다음은 간접 참조 연산자에 대한 포스팅을 하겠다