C++ Chapter 6.8 : 포인터의 연산과 배열 인덱싱

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!


포인터 연산

  • 포인터를 uniptr_t로 형변환 하면 주소가 정수로 보기 좋게 나온다.
using namespace std;

int main()
{
  int value = 7;
  int * ptr = &value;

  cout << uniptr_t(ptr - 1) << endl;
  cout << uniptr_t(ptr) << endl;
  cout << uniptr_t(ptr + 1) << endl;
  cout << uniptr_t(ptr + 1) << endl;
}
  • int형 포인터에 1을 더해주면 주소값이 1 증가하는 것이 아닌 4(bye)가 증가한다.
  • double형 포인터에 1을 더해주면 주소값이 1 증가하는 것이 아닌 8(byte)이 증가한다.
    • double 데이터 타입의 크기는 64bit = 8byte니까 double끼리는 서로 주소가 8칸 차이나기 때문
      • 메모리 공간 1칸당 8bit

주소값들은 가르키는 데이터타입의 크기만큼 차이가 난다.

  • int * ptr일 때 ptr(ptr + n)의 값은 4n 씩 차이난다.
  • dobule * ptr일 때 ptr(ptr + n)의 값은 8n 씩 차이난다.


포인터로 배열 인덱싱

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
	int array[] = { 9,7, 5, 3, 1 };

	cout << array[0] << " " << (uintptr_t)&array[0] << endl;
	cout << array[1] << " " << (uintptr_t)&array[1] << endl;
	cout << array[2] << " " << (uintptr_t)&array[2] << endl;
	cout << array[3] << " " << (uintptr_t)&array[3] << endl;

	return 0;
}
  • 배열의 주소를 담고 있는 포인터는 가르키고 있는 배열을 인덱싱할 수 있는데 [] 말고도 포인터 연산을 이용해 *(ptr + i) 이런식으로 접근할 수 있다.
    • array[i] = *(ptr + i)
    • &array[i] = ptr + i


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

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

댓글 남기기