ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C언어 포인터(pointer)
    Visual Studio/C 기초 2012. 9. 3. 22:53

    이번엔 아주아주 중요한 포인터에 대해 알아보겠습니다.

    포인터에 대해

    먼저, 변수에 선언된 값은 메모리에 저장됩니다. 그 저장된 값의 주소를 가리키는 것을 포인터라 합니다. 컴퓨터의 메모리는 아주 많은 저장 구역으로 구성되고 각각의 위치는 주소에 의해 구분됩니다. 메모리의 주소는 0부터 최대 메모리의 양 까지입니다.

    프로그램 내에서 변수의 이름을 사용할 때 변수는 해당 메모리 영역을 자동으로 사용하게 되는데, 실제로 메모리 영역의 주소가 사용되는 것 이지만 프로그래머는 이런 사실을 깨닫지도 못합니다.

    어느 변수(pnt)가 있다고 칩시다. 먼저 변수 pnt를 선언을 해봅시다.

    int pnt;

    그다음, pnt의 주소를 가리킬 포인터를 생성시킵니다.

    int *thr;

    포인터는 *를 붙여주면 됩니다.(포인터의 이름은 아무 거나 하셔도 됩니다. 그다음 포인터와 pnt 변수를 연결시켜 줍니다.

    thr = &pnt;    // 연산자&를 연결시킬 변수 앞에 써주시면 됩니다.

    printf("%d", pnt)

    printf("%d", *thr)    //이 두 문장은 같은 결과를 나타냅니다.

    변수의 이름을 통해 변수의 값을 사용하는 방법을 직접 사용이라고 하고, 변수에 대한 포인터를 통해 변수의 값을 사용하는 방법을 간접 사용이라 합니다.

    int value = 1;
    int *pnt;
    pnt = &value;
     printf("직접사용의 value 값 : %d\n",value);
     printf("간접사용의 value 값 : %d\n",*pnt);

    이 것이 직접사용과 간접사용의 예입니다. 컴파일 하고 실행하면 두 개의 값이 모두 1이 나옵니다.

    포인터와 배열을 동시에

    포인터와 배열을 동시에 사용하면 RAM의 구조에 대해 좀 더 쉽게 다가갈 수 있습니다. 그렇다면 주소 값을 계산하기 위해 주소연산자를 사용할 필요가 없는 지에 대해 의문이 생기는데요, 배열의 이름은 포인터 상수입니다. 프로그램이 실행되는 동안 배열으 ㅣ주소는 변경될 수 없고 고정된 값을 가지게 됩니다.

    연속적인 배열 요소의 주소 값을 출력하는 프로그램을 만들어 보겠습니다.

     

    #include <stdio.h>

    main(void) {
    int i[10], x;                                  //integer 형 배열을 선언하고 카운트할 변수 x를 선언합니다.
    float f[10];                                   //float 형 배열을 선언합니다.
    double q[10];                              //double 형 배열을 선언합니다.
     printf("\t\tInteger\t\tFloat\t\tDouble");
     printf("\n===============================");
     printf("============================");

     for(x=0;x<10;x++)
      printf("\n요소 %d:\t\t%d\t\t%d\t\t%d",x,&i[x],&f[x],&q[x]);

      printf("\n===============================");
     printf("============================\n");
    }

       

     결과

     

    여기에 저장된 값은 제 컴퓨터 RAM에 적힌 주소로서 사용자의 컴퓨터마다 다른 값이 나올 수 있습니다. 다음엔 포인터 연산에 대해 포스팅하겠습니다.


    추천은 블로거에게 큰 힘이 됩니다

    댓글

Designed by Tistory.