공부 기록/C

C언어 기초부터 다시 씹어먹기 - (3) 포인터에 대해서

bumm 2024. 6. 16. 20:44

 

 

 

포인터란 주소값을 저장하는 기능임.

 

그런데 주소값이란 무엇인가?

주소값은 데이터가 저장된 메모리의 시작부분을 말한다. 

이렇게 말하니 좀 어렵게 들린다. 쉽게 설명을 해보겠다.

 

그에 앞서 변수에 대해 알아보자.

 

변수는 정보를 저장하는 장소다.

 

만약에

int a = 10;

 

이 변수 a에 대해서 알아보자.

a라는 변수에 10이라는 값을 저장한 것이다.

 

그런데

int *p = &a;

 

라고 적힌 것을 발견한다.

 

해석하자면 포인터 p에 변수 a의 주소값을 저장한 것이다.

** & : 주소 연산자로 변수의 이름 앞에 사용하고 해당 변수의 주소값을 반환함.(앰퍼샌드ampersand라고 읽음)

 

그렇다면 주소값은 대체 무엇을 의미하는 것일까?

주소값은 데이터가 저장된 메모리의 시작부분을 의미한다.

 

#include <stdio.h>

int main() {
    int a = 10;     // 변수 a 선언 및 값 할당
    int *p = &a;    // 포인터 p 선언 및 a의 주소값 할당

    // 변수 a의 값 출력
    printf("Value of a: %d\n", a);
    // 포인터 p를 통해 접근한 a의 값 출력
    printf("Value via pointer p: %d\n", *p);

    // 변수 a의 주소값 출력
    printf("Address of a: %p\n", (void*)&a);
    // 포인터 p가 저장하고 있는 주소값 출력
    printf("Address stored in pointer p: %p\n", (void*)p);

    return 0;
}

 

코드 실행 결과

 

주소값에 대해 잘 설명해주고 있는 이미지를 첨부한다.

https://www.tcpschool.com/c/c_pointer_intro

 

c언어에서는 이러한 주소값을 1바이트 크기의 메모리 공간으로 나누어 표현한다.

메모리는 1바이트(8비트) 크기의 작은 조각들로 나뉘어져 있다. 각 바이트마다는 고유한 주소를 갖는다.

 

예를 들어, int형 데이터는 4바이트 크기를 갖는다. 즉, 메모리에서 연속된 4개의 바이트를 사용하는 것.

 

주소값은 바로 이 int형 데이터가 갖는 4바이트의 첫 번째 바이트를 가리킨다.

 

 

요약 

  • 변수 : 값을 저장하는 장소
  • 주소값 : 그 장소의 위치
  • 포인터 : 그 주소값을 저장하는 변수
  • 포인터를 사용하면 변수의 값에 직접 접근하지 않고 그 변수의 주소를 통해 간접적으로 접근할 수 있음.