포인터?

SSamYang·2024년 11월 24일

https://www.youtube.com/watch?v=bz63_WWtKc4&list=PLrj92cHmwIMeGEv1EgvJdIJwQAFzHV3k1&index=1

1. 포인터란?

  • 정의: 포인터는 메모리 주소를 저장하는 변수입니다.
  • 예: int *p;는 정수형(int)의 메모리 주소를 저장할 수 있는 포인터 변수입니다.

2. 포인터의 주요 개념

  1. 메모리 주소와 변수
    • 변수를 선언하면 메모리 공간에 값이 저장되며, 해당 공간에는 고유한 주소가 있습니다.
    • 예: int a = 5;일 때 a의 메모리 주소는 &a로 접근합니다.
  2. 포인터 선언
    • 포인터 변수는 특정 데이터 타입의 주소만 저장할 수 있습니다.
    • 예:
      int a = 5;
      int *p = &a;  // p는 a의 주소를 저장하는 포인터
  3. 포인터 크기
    • 32비트 시스템: 주소값을 저장하는 데 4바이트 사용.
    • 64비트 시스템: 주소값을 저장하는 데 8바이트 사용.
  4. 참조와 역참조
    • 참조: 변수의 주소를 포인터에 저장.
      int a = 5;
      int *p = &a;  // p는 a의 주소를 저장
    • 역참조: 포인터가 가리키는 주소의 값을 가져옴.
      printf("%d", *p);  // p가 가리키는 값(a의 값) 출력

3. 연산자 *&

  1. 주소 연산자(&):
    • 변수의 주소를 가져옵니다.
    • 예: &a는 변수 a의 메모리 주소입니다.
  2. 역참조 연산자(*):
    • 포인터가 가리키는 주소의 값을 가져오거나 수정합니다.
    • 예:
      int a = 5;
      int *p = &a;
      *p = 10;  // a의 값이 10으로 변경됨
  3. 별표 연산자(*)의 용도:
    • 곱하기 연산: a * b
    • 포인터 선언: int *p
    • 역참조: *p

4. 포인터 선언 예제

int a = 5;
int *p = &a;  // p는 a의 주소를 저장

double d = 3.14;
double *ptr = &d;  // ptr은 d의 주소를 저장

5. 포인터와 데이터 타입 일치

  • 포인터와 저장하려는 데이터 타입이 일치해야 합니다.
    • 예: int 변수의 주소는 int* 포인터에 저장.
    • 잘못된 예: double* p = &a; (컴파일 오류 발생)

6. 잘못된 초기화 예

int a = 5;
int *p;       // 포인터 선언
*p = &a;      // 잘못된 표현: 역참조를 사용한 초기화 (오류)
p = &a;       // 올바른 표현: 포인터에 주소 저

7. 코드 작성 스타일

포인터 선언 시 스타일은 다를 수 있지만, 본질은 같습니다:

int* p1;  // 포인터 선언 스타일 1
int *p2;  // 포인터 선언 스타일 2
int * p3; // 포인터 선언 스타일 3
  • 모두 같은 의미이므로 스타일은 개인/팀 규칙에 따라 사용하면 됩니다.

8. 포인터 활용 요약

  • 메모리 주소를 다루며 효율적인 데이터 처리 가능.
  • 동적 메모리 할당(malloc, free 등)과 같은 고급 기능을 사용할 때 필수.
  • 사용 시 정확한 타입 관리와 초기화가 중요.

profile
공부 기록장📕

0개의 댓글