ted0505
Computational Art & Study
ted0505
전체 방문자
오늘
어제
  • 분류 전체보기 (79)
    • Computer Science ( CS ) (0)
    • Computational Thinking (6)
    • 프로젝트 개발일지 (1)
    • Coding (52)
      • C++ (39)
      • JavaScript (2)
      • P5.JS (7)
      • Python (0)
      • HTML5 (1)
      • CSS (0)
    • Game Engine (18)
      • Unreal Engine 4 (18)
      • Unity (0)
    • Physically Based Rendering (0)
    • FilmMaking (0)
    • 잡다 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ted0505

Computational Art & Study

Coding/C++

[ C++ ] Chapter 6.7 : 포인터의 기본적인 사용법

2022. 2. 19. 10:17
  • &변수이름
    • 변수의 주소를 알기 위해 사용하는 address of operator 사용.

 

# 포인터

  • 메모리 주소를 담는 변수를 포인터라고 함.

& - address of operator

  • 포인터 : 저쪽 주소에 가면 이 데이터가 있어요.
  • 변수 앞에 붙으면 그 변수의 주소를 알려줌.

* - de - reference operator

  • 그러면 그 주소에 직접 들여다볼게.
  • 포인터 변수 앞에 붙으면 그 포인터 변수에 담긴 데이터를 알 수 있음.
  • 역 참조.

# 포인터 변수 선언

int main()
{
	int x = 5;
	int * ptr_x = &x;
    
	return 0;
}
  • 포인터 선언은 가리킬 변수의 타입 + * operator.
    • 포인터 변수에 담는 주소 자체는 데이터 타입과 상관없음.
  • int * ptr_x = &x;
    • int 타입 변수의 주소를 담을 수 있는 포인터를 의미.
    • 포인터 변수 ptr_x은 int 타입의 x 변수의 주소로 초기화 됐다.
    • 포인터 변수 ptr_x는 변수 x의 주소를 가리킨다.

# 포인터 변수를 사용하는 이유

  • 배열 때문에
    • 배열은 함수 파라미터에 넣을 수 있음. 
    • 함수 파라미터에 넣으면, 원본이 아닌 배열들이 복사되는 것임.
      • 때문에 연산 속도도 늘어나고 써야하는 메모리 공간도 늘어남.
      • 주소만 복사해서 넘기면 데이터를 복사할 필요가 없어서 효율적으로 개발 가능.

# 포인터의 크기

  • 주소가 어떻든 크기는 동일하다.
    • 32bit 에서는 int, double 상관없이 4 byte.
      • 32bit = 4 byte , 4 byte 주소체계를 사용하기 때문에.
    • 64bit 에서는 int, double 상관없이 8 byte.
      • 64bit = 8 byte , 8 byte 주소체계를 사용하기 때문에.

# Null Pointer

  • 포인터 변수의 주소 값을 초기화 시키는 것.

# 널 포인터를 사용하는 이유

  • 포인터의 위험성
    • 포인터 변수에 쓰레기 주소 값이 들어간 상태에서 de-referencing 을 시도하면 문제 발생.
    • 이것을 방지하고자 널 포인터를 사용.
int main()
{
	int x = 5;
    
	int * ptr_x;	// 포인터 변수에 주소 값을 담지 않은채로 선언함.
	cout << *ptr_x;
}

# 널 포인터 사용 방법

int main()
{
	// c style
	int *ptr_x = 0;
	int *ptr_x = NULL;
    
	// modern c++ style
	int *ptr_x = nullptr;
}

 

'Coding > C++' 카테고리의 다른 글

[ C++ ] Chapter 6.9 : 포인터 연산과 배열 인덱싱  (0) 2022.02.22
[ C++ ] Chapter 6.8 : 포인터와 정적배열  (0) 2022.02.20
[ C++ ] Chapter 6.6 : C언어 스타일의 배열 문자열  (0) 2022.02.18
[ C++ ] Chapter 6.5 : 정적 다차원 배열  (0) 2022.02.17
[ C++ ] Chapter 6.4 : 배열과 정렬선택 selection sort  (0) 2022.02.17
    'Coding/C++' 카테고리의 다른 글
    • [ C++ ] Chapter 6.9 : 포인터 연산과 배열 인덱싱
    • [ C++ ] Chapter 6.8 : 포인터와 정적배열
    • [ C++ ] Chapter 6.6 : C언어 스타일의 배열 문자열
    • [ C++ ] Chapter 6.5 : 정적 다차원 배열
    ted0505
    ted0505

    티스토리툴바