[C] 포인터

Date:     Updated:

카테고리:

태그:

이 글은 C 포인터를 공부하고 정리한 글입니다

코드 예시

int num = 0;
int* pointer = #
*pointer = 10;
printf("num : %d\n", *pointer);

포인터란?

  • 포인터란 주소를 저장하기 위한 특별한 변수
  • 포인터도 변수인데 변수 속에 담긴 내용이 메모리 주소

주소를 알아내는 법

int num = 0;
printf("Address : %p\n", &num);
  • 변수 앞에 & 주소 연산자를 붙여주면 된다

주소를 저장하는 법

int num = 0;
int* pointer = #
  • 포인터 변수를 선언하려면 자료형 뒤에 *를 붙여주면 된다
  • 포인터 변수에 주소를 넣어주면 된다

역 참조 연산자

printf("num : %d\n", *pointer);
*pointer = 10;
  • 포인터 변수 앞에 *을 붙이면 역 참조해서 해당 주소의 값을 가져오거나
  • 해당 주소의 값을 변경 할 수 있다

댕글링 포인터(dangling pointer)

  • 만약 지역변수가 사용한 주소를 함수가 반환하는 경우 함수가 끝나면
  • 해당 주소는 유효하지 않은 주소가 된다
  • 위와 같이 포인터가 유효하지 않은 주소를 가르키는 것을 댕글링 포인터라고 한다

포인터를 반환해도 되는 경우

  • 전역 변수
  • 파일 속 static 전역 변수
  • 함수 내 static 변수
  • 힙 메모리에 생성한 데이터

포인터의 크기

  • 모든 포인터는 동일한 크기를 가짐
  • 포인터 크기는 코드를 컴파일하는 시스템 아키텍쳐에 따라 결정
    • 보통 CPU가 한번에 처리할 수 있는 데이터의 크기와 동일
    • 32비트 아키텍쳐에서 포인트 크기는 4바이트
    • 64비트 아키텍쳐에서 포인트 크기는 8바이트


참조

포큐아카데미 C 언매니지드 프로그래밍



💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우 
  언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸

맨 위로 이동하기

C 카테고리 내 다른 글 보러가기

댓글 남기기