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);

}

우리는 위의 예제에서 주소를 포인터변수에 대입하는 방법을 알았다.

주의할 점은 포인터변수에는 주소를 저장하지 주소의 내용을 저장하지 않는다.

​

포인터를 적재적소로 활용한다면 데이터의 중복적인 복사를 피하고 메모리를 절약 할 수 있다.

​

다음은 간접 참조 연산자에 대한 포스팅을 하겠다

업데이트: