포인터
int a=10; //a에 10 저장
int* ap = &a; //포인터변수 ap에 변수a의 주솟값 저장
//=>int* 로 선언된 포인터 변수는 int형 변수의 주솟값만을 저장할 수 있다.
/* ---------------------------------------
↓주소값 : 48 ↓주소값 : 52
52 → 10
포인터변수 ap (가리킨다) int형 변수 a
--------------------------------------- */
printf("%d", a); //a값 출력 52
printf("%d", *ap); //printf("%d", *&a);와 같으므로 printf("%d", a);이다. 따라서 a값 출력 52
//=>포인터 변수 앞에 *을 붙이면 포인터 변수가 가리키는 곳에 저장된 값을 가져온다.(*과 &가 상쇄됨)
printf("%u", ap); //printf("%d", &a);와 같다. 따라서 a의 주솟값(ap)출력 48
printf("%u", &a); //a의 주솟값을 출력 52
printf("%u", &ap); //ap의 주솟값 출력 48
배열 포인터
int* ap = &ary[0]; //&ary[0] = ary 이므로 ary[0] = *ary = *ap
/* -----------------------------------------------------------------------------------------------------
ary[0] = 10 |
ary[1] = 20 |
ary[2] = 30 |
ary[3] = 40 |
ary[4] = 50 |
↑주소값(ap) : 36 ↑40 ↑44 ↑48 ↑52
= &ary[0] = &ary[0]+1 = &ary[0]+2 = &ary[0]+3 = &ary[0]+4
------------------------------------------------------------------------------------------------------*/
printf("%u", ary); //36
printf("%u", ary+1); //40
printf("%u", ary+2); //44
printf("%u", ary+3); //48
printf("%u", ary+4); //52