ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C언어] 포인터 _ 1차원 배열 완벽 정리
    도쿄/개발 2023. 1. 31. 16:41

    C언어 2강.  1차원 배열

     

    핵심 : 배열의 이름은 그 배열의 시작 주소이다.

    그러므로 포인터 p는 배열의 시작주소 arr을 값으로 담을 수 있다.

    int arr[7] = {1,2,3,4,5,6,7}; //배열의 이름 arr은 포인터이다.
    int *p; //포인터 p 선언
    p = arr; //p[0] == arr[0]
    
    printf("p[0] : %d, arr[0] : %d", p[0], arr[0]);
    printf("p의 주소 : %ul, arr의 주소 : %ul", p, arr);

    결과 : 

    p[0] : 1, arr[0] : 1
    p의 주소 : 13927135812l, arr의 주소 : 13927135812l

     

    간단한 그림으로 표현하자면 다음과 같다.

     

    ① 배열 선언     arr[7] = {1,2,3,4,5,6,7};

    1 2 3 4 5 6 7

        arr[0]         arr[1]         arr[2]         arr[3]         arr[4]         arr[5]         arr[6]

      *(arr+0)    *(arr+1)     *(arr+2)     *(arr+3)    *(arr+4)     *(arr+5)    *(arr+6)

    for(int i = 0; i < 7; ++i){
    	printf("%d, %d", arr[i], *(arr+i));
    }

     결과 : 

    1, 1
    2, 2
    3, 3
    4, 4
    5, 5
    6, 6
    7, 7

    JAVA나 Javascript로 배열을 배워서 arr[0]은 익숙해도  *(arr+0)이 이해하기 어렵다면 다음과 같이 풀어서 생각해보면 좋다.

    *(arr+0)  :  arr+0이 가리키는(*) 값

     

     

    ② 포인터 p선언     int  *p;

     

           p

    p라는 포인터 변수의 공간이 만들어졌다. 

     

     

    ③ 포인터 p에 배열 arr의 첫 번째 값을 가리키는 주소 대입      p = arr;   또는   p = arr+0;  

    &arr

           p           

     

    포인터는 주소를 저장하는 변수이고, 포인터 p에 arr변수의 첫 번째 값을 저장했다면 다음과 같은 일이 벌어진다.

    1 2 3 4 5 6 7

         arr[0]         arr[1]        arr[2]          arr[3]        arr[4]         arr[5]         arr[6]

          p[0]           p[1]           p[2]            p[3]           p[4]           p[5]           p[6]

      *(arr+0)    *(arr+1)     *(arr+2)    *(arr+3)     *(arr+4)    *(arr+5)     *(arr+6) 

       *(p+0)      *(p+1)        *(p+2)      *(p+3)        *(p+4)      *(p+5)       *(p+6) 

     

    즉,

    arr[0]  ==  p[0]  ==  *(arr) ==  *(arr+0) ==  *(p+0)  ==  1

    arr[1]  ==  p[1]  ==  *(arr+1) == *(p+1)  ==  2

    arr[2]  ==  p[2]  ==  *(arr+2) == *(p+2)  ==  3

     

    반응형