포인터 변수 선언 및 사용의 5가지 모양

  • 3 minutes to read

포인터는 메모리의 특정 주소를 가리키는 변수입니다. 아래 코드는 포인터 변수를 어떻게 선언하고 사용하는지 보여주는 예제입니다.

// 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' 자체의 메모리 주소를 나타냅니다. 이는 포인터 변수 또한 메모리 상의 주소를 가지고 있음을 보여줍니다.

이 코드에서는 다섯 가지 포인터 변수의 선언 및 사용 방식이 나타나 있습니다.

  1. 값형 변수: int a = 10;에서 'a'는 값형 변수로, 실제 값을 저장합니다. 여기서는 10이 저장되어 있습니다.

  2. 포인터 변수: int* pa;에서 'pa'는 포인터 변수로, 메모리 주소를 저장합니다.

  3. 포인터 변수에 주소 대입: pa = &a;에서 '&' 연산자를 사용하여 'a'의 주소를 'pa'에 대입합니다.

  4. 역참조를 사용한 값 대입: *pa = 20;에서 '*' 연산자를 사용하여 'pa'가 가리키는 주소에 20을 대입합니다. 이를 역참조라고 합니다.

  5. 포인터 변수 표현: 이후의 printf 구문들에서는 포인터 변수를 어떻게 표현하는지 보여줍니다.

이와 같이 C 언어에서 포인터를 사용하면 메모리에 직접 접근할 수 있으며, 이를 통해 더 효율적인 코드를 작성할 수 있습니다. 그러나 포인터를 사용할 때는 주의가 필요하며, 특히 메모리 해제에 주의해야 합니다. 메모리 누수는 시스템의 성능 저하를 일으킬 수 있으므로, 포인터를 사용할 때는 항상 주의해야 합니다.

더 깊이 공부하고 싶다면
DevLec에서는 실무 중심의 C#, .NET, ASP.NET Core, Blazor, 데이터 액세스 강좌를 단계별로 제공합니다. 현재 수강 가능한 강좌 외에도 더 많은 과정이 준비되어 있습니다.
DevLec.com에서 자세한 커리큘럼을 확인해 보세요.
DevLec 공식 강의
C# Programming
C# 프로그래밍 입문
프로그래밍을 처음 시작하는 입문자를 위한 C# 기본기 완성 과정입니다.
ASP.NET Core 10.0
ASP.NET Core 10.0 시작하기 MVC Fundamentals Part 1 MVC Fundamentals Part 2
웹 애플리케이션의 구조와 MVC 패턴을 ASP.NET Core로 실습하며 익힐 수 있습니다.
Blazor Server
풀스택 웹개발자 과정 Part 1 풀스택 웹개발자 과정 Part 2 풀스택 웹개발자 과정 Part 3
실무에서 바로 활용 가능한 Blazor Server 기반 관리자·포털 프로젝트를 만들어 봅니다.
Data & APIs
Entity Framework Core 시작하기 ADO.NET Fundamentals Blazor Server Fundamentals Minimal APIs
데이터 액세스와 Web API를 함께 이해하면 실무 .NET 백엔드 개발에 큰 도움이 됩니다.
VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com