2010. 7. 10. 02:05
제 17장 포인터의 이해 - 예제

포인터에 대한 이해가 단번에 되기란 쉽지가 않습니다.
그렇기 때문에 예제를 몇개 올려서 여러분께서 직접 실행을 해보면서
이해를 하시기 바랍니다.


에제 1)

#include <stdio.h>

int main()
{
char c = 'B'; // 변수선언
int i = 19;
float f = 4.5f;

// & 연산자를 앞에 붙여줌으로써 주소값을 반환하게 한다.
// 주소를 printf함수로 십진수형태로 출력을 한다.

printf("c의 주소 = %d \n", &c);
printf("i의 주소 = %d \n", &i);
printf("f의 주소 = %d \n", &f);

return 0;
}


에제 2)

#include <stdio.h>

int main()
{
 
// 포인터 변수를 선언 방법 
// int a;
// int *p = &a; // ( int a; int *p; p = &a); 와 같은 표현이다.
// p를 포인터 선언하자 마자, a를 가리키게 한다.

// int type
int i = 300; // 선언한 변수와
int *pi = &i; // 포인터 변수를 선언시 둘의 타입이 같아야한다.
// pi는 i의 메모리주소를 값으로 가지고 있다.
// pi 는 i를 가리킨다로 표현한다.
//char type
char c = 'C';
char *pc = &c;

// short int type
short s = 32;
short *ps = &s;

printf("i = %d \n", i);
printf("*pi = %d \n\n", *pi);
// *pi : pi가 가르키는 변수의 값을 나타냄, 즉, i의 값 300 을 나타냄
printf("c = %c \n", c);
printf("*pc = %c \n\n", *pc);

printf("s = %d \n", s);
printf("*ps = %d \n\n", *ps);

return 0;

}



에제 3)

#include <stdio.h>

int main()
{
int a = 123;
int* p = &a; // int *p;
// p = &a;

printf(" a = %d \n", a);
printf("*p = %d \n", *p);

*p = 456; // p가 가리키는 변수의 값을 456으로 하겠다

printf("*p = 456; \/\/ 실행후 \n");
printf(" a = %d \n", a);
printf("*p = %d \n", *p);

return 0;
}


에제 4)

#include <stdio.h>

int main()
{
int i = 0x12345678; // 16진수형태
char *pc = (char*) &i;
// char형의 포인터 변수가 int형의 변수를 가리킨다
// 포인터와 변수 형을 맞추기 위해서 캐스팅연산을 해준다.

printf("i = %d \n", i);
// 10진수형태로 i의값을 출력

printf("*pc = %d \n", *pc);
// 값을 출력하면 120이 나오는데
// 120이 나온이유는 0x78 의 값이 10진수형태로 나오게 된것이다.
// 보통은 메모리값을 읽을때 뒤에서 부터 읽기때문에
// char 포인터 pc의 첫번째 주소는 0x78을 가리킨다.
// 자세한 사항은 댓글을 적어주시는분께 설명 드리겠음
return 0;
}


에제 5)

#include <stdio.h>

int main()
{
int a  = 100;

int* p = &a;

int* pp = &p; // 포인터를 가리키는 포인터
printf("   a = %d \n", a); // a값 출력 : 100
printf("  *p = %d \n", *p); // p가 그리키는 a의 값 출력 : 100
printf("  &a = %d \n", &a); // a의 메모리주소값 출력
printf("  &p = %d \n", &p); // p의 주소값이 출력
printf(" *pp = %d \n", *pp); // pp가 가리키는 변수의 값 출력

return 0;


}

에제 6)

#include <stdio.h>

int main()
{
int a = 200;
int *p = NULL; // NULL : 0값을 가진 변수
// 현재 p가 가리키는 값은 없다
if(NULL!=p) // 만약 p의 값이 0이 아니라면
*p = 30;


p = &a; // p는 a의 주소를 가진다(p는 a를 가리킨다)

if(!p) // if(NULL!=p) 같은 의미다
*p = 30;

printf("*p = %d \n", *p);

return 0;
}


'프로그래밍 > C' 카테고리의 다른 글

제 19장 포인터의 이해 - 예제분석  (0) 2010.07.10
제 18장 포인터의 이해 - 2  (0) 2010.07.10
제 16장 포인터의 이해 - 1  (0) 2010.07.10
제 15장 1차원 배열 - 2  (0) 2010.07.10
제 14장 1차원 배열 - 1  (0) 2010.07.10
Posted by 토실토실천재