[C] 포인터
카테고리: C
태그: Pointer
이 글은 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바이트
참조
💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸
댓글 남기기