제 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 |