CS/C, C++
[C언어] 포인터(Pointer)
겸둥이xz
2021. 2. 9. 02:54
반응형
포인터(Pointer)
- 포인터는 특정한 변수 자체가 존재하는 메모리 주소의 값을 가진다.
- 포인터는 컴퓨터 시스템의 특정한 메모리에 바로 접근할 수 있다.
- 중요한 메모리 영역에 접근하지 않도록 주의해야 한다. -> 의도하지 않은 결과 발생
기존에 a를 이용해서 5라는 값을 찾을 수 있지만 포인터 변수 b를 이용해서도 5라는 값을 찾을 수 있다.

int main() {
int a = 5;
int *b = &a; // 선언할 때 쓰는 *는 포인터 변수임을 알림
printf("*b = %d\n", *b); // *b = 5
return 0;
}
'선언할 때' 쓰는 *는 포인터 변수임을 알려주기 위한 목적을 가진다.
이후에 *b 라고 쓰게 되면, 포인터 변수 b가 가리키는 주소의 값 5이다. 간접 참조
포인터 관련 연산자
- 주소 연산자(&) : 변수 앞에 붙어서 변수의 메모리 시작 주소 값을 구한다.
- 포인터(*) : 포인터 변수를 선언할 때 사용한다.
- 간접 참조 연산자(*) : 선언된 포인터 변수가 가리키는 변수를 구한다.
int main() {
int a[] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
printf("%d\n", &a[i]);
}
/* 출력결과
-405719472
-405719468
-405719464
-405719460
-405719456
*/
return 0;
}
printf에서 &를 사용하여 주소 값을 출력했기 때문에 배열의 각 원소의 주소 값이 출력된다.
int main() {
int a = 5;
int *b = &a; // 변수 a의 주소 값을 가리킨다.
int **c = &b; // 포인터 변수 b의 메모리 주소 값을 가리킨다.
printf("%d\n", **c); // 5
return 0;
}
포인터는 단지 특정한 메모리 주소를 담고 있는 변수일뿐이다. 포인터는 다중으로 사용 가능하다.
배열과 포인터
- 배열과 포인터는 사실 동일하다.
- 배열을 선언한 이후에는 그 이름 자체가 포인터 변수와 동일함.
int main() {
int a[] = {1, 2, 3, 4, 5};
int *b = a;
printf("%d\n", b[2]); // 3
return 0;
}
<참고>
패스트캠퍼스 컴퓨터공학 올인원 패키지 - (컴퓨터 공학 전공필수 소프트웨어 베이직)
반응형