포인터 변수 선언 및 사용의 5가지 모양
추천 자료: ASP.NET Core 인증 및 권한 부여
포인터는 메모리의 특정 주소를 가리키는 변수입니다. 아래 코드는 포인터 변수를 어떻게 선언하고 사용하는지 보여주는 예제입니다.
// pointer_variable_five.c
/*
값(Value)형 변수/배열
포인터(참조;Reference)형 변수/배열
*/
#include <stdio.h>
int main(void)
{
// Value Type 변수
int a = 10;
// Reference Type 변수: 포인터 변수
int* pa;
// 참조 추가
pa = &a; // 포인터 변수에 주소 대입
*pa = 20; // 역참조를 사용하여 포인터 변수가 참조하는 변수에 값 대입
// 값형 변수 표현
printf("[1] %d\n", a); // 20
printf("[2] %p\n", &a); // 메모리 주소: 000000901175F974 번지: 계속 바뀌는 부분
// 포인터형 변수 표현
printf("[3] %p\n", pa); // 메모리 주소: 000000901175F974 번지
printf("[4] %p\n", &pa); // 포인터 변수의 메모리 주소: 000000901175F998 번지
printf("[5] %d\n", *pa); // 20
return 0;
}
[1] 20
[2] 000000901175F974
[3] 000000901175F974
[4] 000000901175F998
[5] 20
출력 결과에서 '[2]'와 '[3]'은 같은 메모리 주소를 가리키며, 이는 'a'의 주소와 'pa'가 가리키는 주소가 같음을 의미합니다. '[4]'는 'pa' 자체의 메모리 주소를 나타냅니다. 이는 포인터 변수 또한 메모리 상의 주소를 가지고 있음을 보여줍니다.
이 코드에서는 다섯 가지 포인터 변수의 선언 및 사용 방식이 나타나 있습니다.
값형 변수:
int a = 10;
에서 'a'는 값형 변수로, 실제 값을 저장합니다. 여기서는 10이 저장되어 있습니다.포인터 변수:
int* pa;
에서 'pa'는 포인터 변수로, 메모리 주소를 저장합니다.포인터 변수에 주소 대입:
pa = &a;
에서 '&' 연산자를 사용하여 'a'의 주소를 'pa'에 대입합니다.역참조를 사용한 값 대입:
*pa = 20;
에서 '*' 연산자를 사용하여 'pa'가 가리키는 주소에 20을 대입합니다. 이를 역참조라고 합니다.포인터 변수 표현: 이후의 printf 구문들에서는 포인터 변수를 어떻게 표현하는지 보여줍니다.
이와 같이 C 언어에서 포인터를 사용하면 메모리에 직접 접근할 수 있으며, 이를 통해 더 효율적인 코드를 작성할 수 있습니다. 그러나 포인터를 사용할 때는 주의가 필요하며, 특히 메모리 해제에 주의해야 합니다. 메모리 누수는 시스템의 성능 저하를 일으킬 수 있으므로, 포인터를 사용할 때는 항상 주의해야 합니다.
추천 자료: .NET Blazor에 대해 알아보시겠어요? .NET Blazor 알아보기를 확인해보세요!