반응형

아래와 같은 배열선언과 배열값 변경 코드가 있다.

이를 포인터로 변환시키는 방법.

#include <stdio.h>

int main()
{
    int arr[3] = { 0, 1, 2 };
    // 배열 초기값 출력 해보기
    printf("arr[0] : %d\n", arr[0]);
    printf("arr[1] : %d\n", arr[1]);
    printf("arr[2] : %d\n", arr[2]);

    // 배열 값 변경하기
    arr[0] = 10;
    arr[1] = 30;
    arr[2] = 50;

    printf("변경된 배열 값\n");
    printf("arr[0] : %d\n", arr[0]);
    printf("arr[1] : %d\n", arr[1]);
    printf("arr[2] : %d\n", arr[2]);

    return 0;
}

반응형

<포인터로 변환하기>

#include <stdio.h>

int main()
{
    // int형 포인터변수 선언 및 초기화
    int* ptr = NULL;

    // int형 초기값 변수 선언
    int arr = 0;

    // arr 주소를 ptr 포인터변수의 주소값으로 할당
    ptr = &arr;

    // ptr뒤 배열에 각각 값 할당 (int형이므로 +1당 4byte씩 뒤로 주소값 증가)
    *(ptr + 1) = 1;
    *(ptr + 2) = 2;


    // 배열 초기값 출력 해보기
    printf("arr[0] : %d\n", ptr[0]);
    printf("arr[1] : %d\n", ptr[1]);
    printf("arr[2] : %d\n", ptr[2]);

    // 배열 값 변경하기
    ptr[0] = 10;
    ptr[1] = 30;
    ptr[2] = 50;

    printf("변경된 배열 값\n");
    printf("arr[0] : %d\n", ptr[0]);
    printf("arr[1] : %d\n", ptr[1]);
    printf("arr[2] : %d\n", ptr[2]);

    return 0;
}

(결과)

같은 결과가 나오게 된다.

ptr은 int형 포인터 (int*) 으로 선언했기 때문에, int형인 arr값의 주소를 받을 수 있다.

ptr = &arr;   arr의 주소값을 ptr에 넣었기 때문에 아래와 같이 표현이 가능하다.

*(ptr) 은 해당 주소 내부의 값을 리턴하는 명령이다. 

 

===============================

 

(알아두면 좋은 사항)

 포인터에서 많이 보는 연산자는 * 일것이다.

*를 어떤타입과 어느 위치에 쓰냐에 따라서 특색이 다 다르다.

 

1. 곱셈으로의 역할 (아래와 숫자 사이, 숫자를 가진 변수와 연산과 함께 쓰면 곱셈이다)

  int a = 1 * 2 ;
  int b = a * 3 ;

 

2. 포인터 선언에 대한 역할 (아래와 같이 포인터로 선언할때 사용한다.)

   포인터로 선언했기 때문에, 이제 ptr에는 int형 타입의 주소값을 저장할 수 있다.

  int * ptr;

 

3. 포인터가 가리키는 값에 대한 접근 (*ptr)

// 포인터 선언
int * ptr;
int num = 1;

// ptr에 num의 주소를 대입
ptr = &num

// *ptr을 이용해서 num주소에 있는 값을 출력할 수 있음
printf("ptr value is : %d", *ptr);

// *ptr을 이용해서 가리키고 있는 값을 바꿀 수 있음 (num값을 3으로 바꿈)
*ptr = 3;

 

 

반응형

+ Recent posts