포인터

뜻

변수의 주소를 저장하는 변수

int a=10;
int *p=&a;
표현뜻
a변수의 값
&aa의 주소
pa의 주소를 저장
*pp가 가리키는 주소 안의 값

핵심 연산자

기호이름뜻
&주소 연산자변수의 주소를 얻음
*간접 참조 연산자포인터가 가리키는 값을 참조

비교

int p=a;// 값 복사
int *p=&a;// 주소 저장

시험 암기

포인터 = 주소 저장 변수

& = 주소 얻기

* = 주소 안의 값 보기

추가 예제 정리

int arr[]= {10,20,30};
int *p=arr;
  • arr = 배열의 시작 주소 = &arr[0]
  • p = arr = p가 arr[0] 주소를 저장
  • p = p가 가리키는 값 = arr[0] = 10
printf("%d",*p);

출력: 10


포인터 + 배열

*(p+1)

뜻: p에서 한 칸 이동한 주소의 값

결과: arr[1] = 20

*(p+2)

뜻: p에서 두 칸 이동한 주소의 값

결과: arr[2] = 30


헷갈리는 것

*p+2

뜻: p가 가리키는 값에 2 더하기

10 + 2 = 12

*(p+2)

뜻: p에서 2칸 이동한 곳의 값

arr[2] = 30


암기

arr = &arr[0]
*arr = arr[0]

p = arr
*p = arr[0]
*(p+1) = arr[1]
*(p+2) = arr[2]

*p+2 = 값에 2 더하기
*(p+2) = 2칸 뒤 값