이이프
IeF 제멋대로 세상
이이프
전체 방문자
오늘
어제

공지사항

  • ✔ Info
  • 전체 글보기 (56)
    • 💻프로그래밍 내용 정리 (55)
      • C (0)
      • C++17 (55)
    • 💻게임메이커 (0)
    • 💻언리얼엔진 (0)
    • 💻유니티 (0)
    • 🎈[팀&자작]게임소개 (0)
    • 📃게임제작기술 (0)
    • 🎨그림놀이 (0)
    • 📒대학생활 (0)
    • 😃잡담 (1)
    • 🕹게임성과 (0)
    • 💷자격증 (0)

블로그 메뉴

  • 방명록

최근 글

최근 댓글

티스토리

hELLO · Designed By 정상우.
이이프

IeF 제멋대로 세상

💻프로그래밍 내용 정리/C++17

[C++ 7.3.1] 포인터 연산

2022. 8. 24. 16:07
728x90

포인터 연산

C++ 컴파일러는 포인터 연산할 때 포인터에 선언된 타입을 이용한다.

포인터를 int로 선언하고 그 값을 1만큼 증가하면 포인터는 메모리에서 한 바이트가 아닌 int 크기만큼 이동한다.

 

이 연산은 주로 배열을 다루는 데 유용하다.

배열에 담긴 데이터는 모두 타입이 같을 뿐만 아니라 메모리에 연속적으로 저장돼 있기 때문이다.

다음은 int 타입의 힙 배열을 선언한 경우이다.

int* myArray = new int[8];

 

이 배열의 인덱스 2에 해당하는 지점에 값을 넣는 방법은 이미 잘 알 것이다.

myArray[2] = 33;

 

위 코드를 포인터 연산으로도 표현할 수 있다.

다시 말해 myArray가 시작하는 시점에서 int 값이 담긴 칸을 두 번 건너서 거기 값을 역참조하면 된다.

*(myArray + 2) = 33;

 

포인터 연산의 강점은 myArray + 2와 같은 표현식으로 포인터를 표현하고,

이를 이용해서 더 작은 정수 배열을 표현할 수 있다.

 

다음과 같은 와이드 스트링에도 유용하게 쓸 수 있다.

const wchar_t* myString = L"Hello, World";

 

와이드 스트링을 인수로 받아서 그 값을 대문자로 변환해 새로운 스트링을 만들어 리턴하는 함수가 있다고 하자.

wchar_t* toCaps(const wchar_t* inString);

이 함수에 myString을 전달해서 대문자로 변환할 수 있다.

이때 myString의 일부분만 대문자로 변환하려면 원하는 부분의 시작점을 포인터 연산으로 표현한다.

 

예를 들면 World만 대문자로 바꾸기 위해 스트링의 시작점을 가리키는 포인터에 7을 더한 값을 함수로 전달한다.

toCaps(myString + 7)

 

포인터 연산에서 뺄셈도 유용하다.

한 포인터에서 같은 타입의 포인터를 빼면 두 포인터 사이에 몇 바이트가 있는지가 아니라

포인터에 지정한 타입의 원소가 몇 개 있는지 알 수 있다.

'💻프로그래밍 내용 정리 > C++17' 카테고리의 다른 글

[C++ 7.3.3] 가비지 컬렉션  (0) 2022.08.24
[C++ 7.3.2] 커스텀 메모리 관리  (0) 2022.08.24
[C++ 7.2.2] 포인터와 배열2  (0) 2022.08.24
[C++ 7.2.1] 배열과 포인터  (0) 2022.08.24
[C++ 7.1.4] 포인터 다루기  (1) 2022.08.22
    '💻프로그래밍 내용 정리/C++17' 카테고리의 다른 글
    • [C++ 7.3.3] 가비지 컬렉션
    • [C++ 7.3.2] 커스텀 메모리 관리
    • [C++ 7.2.2] 포인터와 배열2
    • [C++ 7.2.1] 배열과 포인터
    이이프
    이이프
    게임 프로그래머 지망생 / Since 2022.08.14

    티스토리툴바