C++ Chapter 6.8 : 포인터의 연산과 배열 인덱싱
카테고리: Cpp
태그: Cpp Programming
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 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
- double 데이터 타입의 크기는 64bit = 8byte니까 double끼리는 서로 주소가 8칸 차이나기 때문
주소값들은 가르키는 데이터타입의 크기만큼 차이가 난다.
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
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기