1. 포인터의 타입

 - 대상체 (Object) : 포인터가 가리키는 실체.   정수형 포인터의 대상체 = 정수형 변수 /  실수형 포인터의 대상체 = 실수형 변수


 ex) 


 

void main()

{

     int i=1234;

     int *pi;

     double d=3.14;

     double *pd;

 

     pi=&i;

     pd=&d;

     printf("정수 = %d\n",*pi);

     printf("실수 = %f\n",*pd);

 

     pi=(int *)&d;

     printf("pi로 읽은 d번지의 값 = %d\n",*pi);

}


   [실행결과]


    정수 = 1234

실수 = 3.140000

pi로 읽은 d번지의 값 = 1374389535


----------------------------------------------------


*  : 포인터가 가리키는 곳의 대상체를 읽는 연산자




 





 

void main()

{

     int ar[]={1,2,3,4,5};

     int *pi;

 

     pi=ar;

     printf("첫 번째 요소 = %d\n",*pi);

     pi++;

     printf("두 번째 요소 = %d\n",*pi);

}

 


 [실행 결과]

   첫번째 요소 = 1

   두번째 요소 = 2 


 ------------------------------------------------------------------


 여기서 주목할 점은

 1. " pi = ar "

      & 이 없고 ar[0]로 지정을 안해줘도 자동적으로 

      ar[0]의 주소를 pi 변수가 받음!

 2. " pi++"

      T형 포인터 변수 px에 정수 i를 더하면 

      주소가 int의 size만큼 4바이트가 증가한다 







2. 포인터의 연산

 

 -  덧셈은 불가능하다 ( 더해봤자 의미가 없다 )


 - 뺄셈은 두 포인터의 상대적 거리라는 의미가 있다.


 - 포인터에 정수를 더하거나 뺄 수 있다. (= 포인터 타입의 size 만큼 곱해져서 더해지는거다)


 - 포인터와 실수와의 연산은 불가능

  

 - 곱셈과 나눗셈은 불가능

 

 - 포인터끼리 비교는 가능 : ==, != , >, < , <= , >= 비교 연산자 가능 

    ( ex) if (ptr1 > ptr2)  : ptr1 이 ptr2보다 더 뒤쪽에 있냐 )



 

void main()

{

     int ar[]={1,2,3,4,5};

     int *p1,*p2,*p3;

 

     p1=&ar[0];

     p2=&ar[4];

     p3=p1+(p2-p1)/2;

 

     printf("중간의 요소 = %d",*p3);

} 

 [ 실행결과 ] 

  중간의 요소 = 3



출처 : www.soen.kr


'Engineering > Data Sturcture' 카테고리의 다른 글

포인터공부4 - 이중포인터  (0) 2016.03.16
포인터공부3 - 동적메모리 할당  (0) 2016.03.15
포인터공부 2  (0) 2016.03.15
2. What is the running time ?  (0) 2016.03.09
1. ' Bubble Sort ' vs ' Merge Sort '  (0) 2016.03.05

+ Recent posts