포인터
뜻
변수의 주소를 저장하는 변수
int a=10;
int *p=&a;
| 표현 | 뜻 |
|---|---|
a | 변수의 값 |
&a | a의 주소 |
p | a의 주소를 저장 |
*p | p가 가리키는 주소 안의 값 |
핵심 연산자
| 기호 | 이름 | 뜻 |
|---|---|---|
& | 주소 연산자 | 변수의 주소를 얻음 |
* | 간접 참조 연산자 | 포인터가 가리키는 값을 참조 |
비교
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칸 뒤 값