달력

12

« 2020/12 »

  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
반응형

   

포인터 배열과 포인터 변수의 차이 확인

   

   

배열 포인터 메모리 구조

int array[2][3]={10,20,30,40,50,60};

// 배열 포인터 변수

int (*p)[3];

   

p=array;


   

포인터 배열 메모리 구조

int a=10, b=20, c=30;                

//포인터 배열

int* ap[3];

   

ap[0]=&a;

ap[1]=&b;

ap[2]=&c;

   

  

   

   

소스코드

   

#include <stdio.h>

int main(void) {
        int a=10, b=20, c=30;
        //
포인터 배열
        int* ap[3];

        int array[2][3]={10,20,30,40,50,60};
        //
배열 포인터 변수
        int (*p)[3];

        ap[0]=&a;
        ap[1]=&b;
        ap[2]=&c;

        printf("%x %x %x \n", &a, &b, &c);
        printf("%x %x %x \n", ap[0], ap[1], ap[2]);             // ap[i] == *(ap+i)
        printf("%x %x %x \n", *(ap+0), *(ap+1), *(ap+2));       // ap[i] == *(ap+i)
        printf("-----------\n");

        printf("%d %d %d \n", *&a, *&b, *&c);
        printf("%d %d %d \n", *ap[0], *ap[1], *ap[2]);  // ap[i] == *(ap+i)
        printf("%d %d %d \n", **(ap+0), **(ap+1), **(ap+2));    // ap[i] == *(ap+i)
        printf("-----------\n");
        
        
        p=array;                //
배열 포인터 변수에 배열의 시작 주소를 저장

        printf("%d %d %d \n", p[0][0], p[0][1], p[0][2]);
        printf("%d %d %d \n", p[1][0], p[1][1], p[1][2]);
        printf("-----------\n");

        printf("%d %d %d \n", *(p[0]+0), *(p[0]+1), *(p[0]+2)); // p[i] == *(p+i)
        printf("%d %d %d \n", *(p[1]+0), *(p[1]+1), *(p[1]+2)); // p[i] == *(p+i)
        printf("-----------\n");

        printf("%d %d %d \n", *(*(p+0)+0), *(*(p+0)+1), *(*(p+0)+2));   // p[i] == *(p+i)
        printf("%d %d %d \n", *(*(p+1)+0), *(*(p+1)+1), *(*(p+1)+2));   // p[i] == *(p+i)
        printf("-----------\n");

        return 0;
}


   

   

출력결과

 

반응형
Posted by codedragon codedragon

댓글을 달아 주세요