2010. 7. 10. 02:06

제 19장 포인터의 이해 - 예제분석


예제_1) =================================================================================

#include <stdio.h>
 
int main(void)
{
 
   char a ='a';
   int b = 1;
   float c =1.3f;
   double d =3.5;
// 각 포인트 자료형은 가리키는 자료형에 맞게 선언해줄것을 주의!
   char *p1 = &a; // p1는 a를 가리키고 있다. 
   int *p2 =&b; // p2는 b를 가리키고 있다.
   float *p3 =&c; // p3는 c를 가리키고 있다.
   double *p4 = &d; // p4는 d를 가리키고 있다.
 
   *p1 =*p1+1; // p1이 가리키는 변수의 값에 1을 더한다. a = 'b'
   *p2 =*p2+1; // p2가 가리키는 변수의 값에 1을 더한다. b = 2;
   *p3+=1;                  //*p3=*p3+1과 같다 (p3가 가리키는 변수의 값(c+=1)
   *p4+=1;                  //*p4=*p4+1과 같다 (p4가 가리키는 변수의 값(d+=1)
 
   printf(" a : %c \n", a); // a는 문자기 때문에 아스키코드값이 1증가하면서 b로 된다.
   printf(" b : %d \n", b);  
   printf(" c : %f  \n", c);
   printf(" d : %lf  \n", d);

   return 0 ;
}

예제_2) =================================================================================
 
#include <stdio.h>
 
int main(void)
{
 
   int a = 10;
   int b = 20;
 
   int *p1 = &a;         // 포인터 변수 p1은 a를 가리키고 있다. p1은 a의 주소값을 값으로 가진다.
   int *p2 = &b;         // 포인터 변수 p2는 b를 가리키고 있다. p2는 b의 주소값을 값으로 가진다.
   int *temp; // 포인터 변수 temp 선언만!, 현재 어딘가를 가리키고 있음(쓰레기값을 가짐)
 
  (*p1)--; // p1이 가리키는 변수의 값, 즉 a의 값을 -1 연산을 한다.
  (*p2)--; // p2가 가리키는 변수의 값, 즉 b의 값을 -1 연산을 한다.
 
  // p1과 p2가 가리키는 대상을 서로 변경

  temp = p1; // 포인터변수 temp는 p1의 주소값을 가진다.
  p1=p2; // 포인터변수 p2의 주소값을 p1로
  p2=temp; // 포인터변수 temp의 주소(즉 p1의 주소)를  p2에 대입
 
  printf("%d, %d \n", *p1,*p2); // p1, p2 가 가리키는 주소가 바뀌게 됨
  return 0 ;               
}

포인터 공부는 설명도 설명이지만, 직접 메모리 구조를 그려보면서, 주소값, 변수값 등의
변화등 특징을 공부하시는게 더 이해가 빠를겁니다.
소스만 분석하는게 아니고, 직접 그림을 그려보면서 말로 풀이를 해보면서 해보세요~

포인터 강의자료를 참고하세요~

Posted by 토실토실천재