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 |